import apiClient from './apiClient'; export interface PlatformCurrencyResponse { status: string; data: { currency: string; updated_at: string | null; updated_by: string | null; }; } export interface UpdateCurrencyRequest { currency: string; } export interface StripeSettingsResponse { status: string; data: { stripe_secret_key: string; stripe_publishable_key: string; stripe_webhook_secret: string; stripe_secret_key_masked: string; stripe_webhook_secret_masked: string; has_secret_key: boolean; has_publishable_key: boolean; has_webhook_secret: boolean; updated_at?: string | null; updated_by?: string | null; }; message?: string; } export interface UpdateStripeSettingsRequest { stripe_secret_key?: string; stripe_publishable_key?: string; stripe_webhook_secret?: string; } export interface PayPalSettingsResponse { status: string; data: { paypal_client_id: string; paypal_client_secret: string; paypal_mode: string; paypal_client_secret_masked: string; has_client_id: boolean; has_client_secret: boolean; }; } export interface UpdatePayPalSettingsRequest { paypal_client_id?: string; paypal_client_secret?: string; paypal_mode?: string; } export interface SmtpSettingsResponse { status: string; data: { smtp_host: string; smtp_port: string; smtp_user: string; smtp_password: string; smtp_password_masked: string; smtp_from_email: string; smtp_from_name: string; smtp_use_tls: boolean; has_host: boolean; has_user: boolean; has_password: boolean; updated_at?: string | null; updated_by?: string | null; }; message?: string; } export interface UpdateSmtpSettingsRequest { smtp_host?: string; smtp_port?: string; smtp_user?: string; smtp_password?: string; smtp_from_email?: string; smtp_from_name?: string; smtp_use_tls?: boolean; } export interface TestSmtpEmailRequest { email: string; } export interface TestSmtpEmailResponse { status: string; message: string; data: { recipient: string; sent_at: string; }; } export interface CompanySettingsResponse { status: string; data: { company_name: string; company_tagline: string; company_logo_url: string; company_favicon_url: string; company_phone: string; company_email: string; company_address: string; tax_rate: number; updated_at?: string | null; updated_by?: string | null; }; message?: string; } export interface UpdateCompanySettingsRequest { company_name?: string; company_tagline?: string; company_phone?: string; company_email?: string; company_address?: string; tax_rate?: number; } export interface UploadLogoResponse { status: string; message: string; data: { logo_url: string; full_url: string; }; } export interface UploadFaviconResponse { status: string; message: string; data: { favicon_url: string; full_url: string; }; } export interface RecaptchaSettingsResponse { status: string; data: { recaptcha_site_key: string; recaptcha_enabled: boolean; }; } export interface RecaptchaSettingsAdminResponse { status: string; data: { recaptcha_site_key: string; recaptcha_secret_key: string; recaptcha_secret_key_masked: string; recaptcha_enabled: boolean; has_site_key: boolean; has_secret_key: boolean; updated_at?: string | null; updated_by?: string | null; }; } export interface UpdateRecaptchaSettingsRequest { recaptcha_site_key?: string; recaptcha_secret_key?: string; recaptcha_enabled?: boolean; } export interface VerifyRecaptchaRequest { token: string; } export interface VerifyRecaptchaResponse { status: string; data: { verified: boolean; score?: number; action?: string; error_codes?: string[]; message?: string; }; } const systemSettingsService = { /** * Get platform currency (public endpoint) */ getPlatformCurrency: async (): Promise => { const response = await apiClient.get( '/api/admin/system-settings/currency' ); return response.data; }, /** * Update platform currency (Admin only) */ updatePlatformCurrency: async ( currency: string ): Promise => { const response = await apiClient.put( '/api/admin/system-settings/currency', { currency } ); return response.data; }, /** * Get Stripe settings (Admin only) */ getStripeSettings: async (): Promise => { const response = await apiClient.get( '/api/admin/system-settings/stripe' ); return response.data; }, /** * Update Stripe settings (Admin only) */ updateStripeSettings: async ( settings: UpdateStripeSettingsRequest ): Promise => { const response = await apiClient.put( '/api/admin/system-settings/stripe', settings ); return response.data; }, /** * Get PayPal settings (Admin only) */ getPayPalSettings: async (): Promise => { const response = await apiClient.get( '/api/admin/system-settings/paypal' ); return response.data; }, /** * Update PayPal settings (Admin only) */ updatePayPalSettings: async ( settings: UpdatePayPalSettingsRequest ): Promise => { const response = await apiClient.put( '/api/admin/system-settings/paypal', settings ); return response.data; }, /** * Get SMTP settings (Admin only) */ getSmtpSettings: async (): Promise => { const response = await apiClient.get( '/api/admin/system-settings/smtp' ); return response.data; }, /** * Update SMTP settings (Admin only) */ updateSmtpSettings: async ( settings: UpdateSmtpSettingsRequest ): Promise => { const response = await apiClient.put( '/api/admin/system-settings/smtp', settings ); return response.data; }, /** * Test SMTP email (Admin only) */ testSmtpEmail: async ( email: string ): Promise => { const response = await apiClient.post( '/api/admin/system-settings/smtp/test', { email } ); return response.data; }, /** * Get company settings (public endpoint) */ getCompanySettings: async (): Promise => { const response = await apiClient.get( '/api/admin/system-settings/company' ); return response.data; }, /** * Update company settings (Admin only) */ updateCompanySettings: async ( settings: UpdateCompanySettingsRequest ): Promise => { const response = await apiClient.put( '/api/admin/system-settings/company', settings ); return response.data; }, /** * Upload company logo (Admin only) */ uploadCompanyLogo: async ( file: File ): Promise => { const formData = new FormData(); formData.append('image', file); // Don't set Content-Type header - let the browser set it with the correct boundary const response = await apiClient.post( '/api/admin/system-settings/company/logo', formData ); return response.data; }, /** * Upload company favicon (Admin only) */ uploadCompanyFavicon: async ( file: File ): Promise => { const formData = new FormData(); formData.append('image', file); // Don't set Content-Type header - let the browser set it with the correct boundary const response = await apiClient.post( '/api/admin/system-settings/company/favicon', formData ); return response.data; }, }; const recaptchaService = { /** * Get reCAPTCHA settings (public endpoint) */ getRecaptchaSettings: async (): Promise => { const response = await apiClient.get( '/api/admin/system-settings/recaptcha' ); return response.data; }, /** * Get reCAPTCHA settings (admin only) */ getRecaptchaSettingsAdmin: async (): Promise => { const response = await apiClient.get( '/api/admin/system-settings/recaptcha/admin' ); return response.data; }, /** * Update reCAPTCHA settings (admin only) */ updateRecaptchaSettings: async ( settings: UpdateRecaptchaSettingsRequest ): Promise => { const response = await apiClient.put( '/api/admin/system-settings/recaptcha', settings ); return response.data; }, /** * Verify reCAPTCHA token */ verifyRecaptcha: async ( token: string ): Promise => { const response = await apiClient.post( '/api/admin/system-settings/recaptcha/verify', { token } ); return response.data; }, }; export default systemSettingsService; export { recaptchaService }; export type { PlatformCurrencyResponse, UpdateCurrencyRequest, StripeSettingsResponse, UpdateStripeSettingsRequest, PayPalSettingsResponse, UpdatePayPalSettingsRequest, SmtpSettingsResponse, UpdateSmtpSettingsRequest, TestSmtpEmailRequest, TestSmtpEmailResponse, CompanySettingsResponse, UpdateCompanySettingsRequest, UploadLogoResponse, UploadFaviconResponse, RecaptchaSettingsResponse, RecaptchaSettingsAdminResponse, UpdateRecaptchaSettingsRequest, VerifyRecaptchaRequest, VerifyRecaptchaResponse, };