import api from './api'; // Интерфейсы для настроек export interface SiteSetting { key: string; value: any; description?: string; } export interface StoreSetting { site_name: string; site_description: string; contact_email: string; contact_phone?: string; address?: string; social_links?: { facebook?: string; instagram?: string; twitter?: string; youtube?: string; }; currency: string; currency_symbol: string; default_language: string; available_languages: string[]; logo_url?: string; favicon_url?: string; primary_color?: string; secondary_color?: string; shipping_methods: Array<{ id: string; name: string; description?: string; price: number; is_default?: boolean; }>; payment_methods: Array<{ id: string; name: string; description?: string; is_default?: boolean; }>; } export interface LocaleData { [key: string]: string | LocaleData; } // Сервис для работы с настройками магазина const settingsService = { // Получить настройки магазина getStoreSettings: async (): Promise => { try { const response = await api.get('/settings/store'); return response as StoreSetting; } catch (error) { console.error('Ошибка при получении настроек магазина:', error); return null; } }, // Обновить настройки магазина (только для админов) updateStoreSettings: async (settings: Partial): Promise => { try { const response = await api.put('/settings/store', settings); return response as StoreSetting; } catch (error) { console.error('Ошибка при обновлении настроек магазина:', error); return null; } }, // Получить все настройки по группе getSettingsByGroup: async (group: string): Promise => { try { const response = await api.get(`/settings/${group}`); return response as SiteSetting[]; } catch (error) { console.error(`Ошибка при получении настроек группы ${group}:`, error); return null; } }, // Получить настройку по ключу getSettingByKey: async (key: string): Promise => { try { const response = await api.get(`/settings/key/${key}`); return response as SiteSetting; } catch (error) { console.error(`Ошибка при получении настройки ${key}:`, error); return null; } }, // Обновить настройку (только для админов) updateSetting: async (key: string, value: any): Promise => { try { const response = await api.put(`/settings/key/${key}`, { value }); return response as SiteSetting; } catch (error) { console.error(`Ошибка при обновлении настройки ${key}:`, error); return null; } }, // Получить данные локализации для указанного языка getLocale: async (lang: string): Promise => { try { const response = await api.get(`/settings/locales/${lang}`); return response as LocaleData; } catch (error) { console.error(`Ошибка при получении локализации для языка ${lang}:`, error); return null; } }, // Получить список доступных языков getAvailableLanguages: async (): Promise => { try { const response = await api.get('/settings/languages'); return response as string[]; } catch (error) { console.error('Ошибка при получении списка доступных языков:', error); return null; } }, // Форматирование цены с использованием правильной валюты formatPrice: (price: number, settings?: StoreSetting): string => { const defaultCurrency = settings?.currency_symbol || '₽'; // Форматируем число с двумя десятичными знаками const formattedPrice = price.toFixed(2).replace(/\.00$/, ''); // Возвращаем форматированную цену с символом валюты return `${formattedPrice} ${defaultCurrency}`; } }; export default settingsService;