import { API_CONFIG, DEFAULT_REQUEST_CONFIG } from '@/config/api';
import AuthService from './AuthService';

const API_BASE_URL = API_CONFIG.BASE_URL;

class MarketingV3Service {
    /**
     * Запуск маркетингового анализа v4.0
     * POST /api/marketing/v3/start
     * @param {Object} data - MarketingAnalysisV3Request
     * @returns {Promise<Object>} { analysisId: string }
     */
    async startAnalysisV3(data) {
        try {
            const response = await AuthService.authFetch(`${API_BASE_URL}/api/marketing/v3/start`, {
                method: 'POST',
                ...DEFAULT_REQUEST_CONFIG,
                body: JSON.stringify(data)
            });

            const result = await response.json().catch(() => null);

            if (!response.ok) {
                throw new Error(result?.message || result?.error?.message || 'Ошибка при запуске анализа v4.0');
            }

            return result?.data ?? result;
        } catch (error) {
            console.error('Ошибка при запуске маркетингового анализа v4.0:', error);
            throw error;
        }
    }

    /**
     * Получение анализа v4.0 по ID
     * GET /api/marketing/v3/{id}
     * @param {string} id - Идентификатор анализа
     * @returns {Promise<Object>} MarketingAnalysisV3Document
     */
    async getAnalysisV3ById(id) {
        try {
            const response = await AuthService.authFetch(`${API_BASE_URL}/api/marketing/v3/${id}`);

            const result = await response.json().catch(() => null);

            if (!response.ok) {
                throw new Error(result?.message || result?.error?.message || 'Ошибка при получении анализа v4.0');
            }

            return result?.data ?? result;
        } catch (error) {
            console.error('Ошибка при получении анализа v4.0:', error);
            throw error;
        }
    }
    async getUserAnalyses() {
        try {
            const response = await AuthService.authFetch(`${API_BASE_URL}/api/marketing/v3/my`);
            const result = await response.json().catch(() => null);
            if (!response.ok) {
                throw new Error(result?.message || result?.error?.message || 'Ошибка при получении списка анализов');
            }
            // ApiResponse wrapper: { data: [...] } или прямой массив
            return result?.data ?? result ?? [];
        } catch (error) {
            console.error('Ошибка при получении списка анализов v4.0:', error);
            throw error;
        }
    }

    /**
     * ЭТАП 2: Предпросмотр стратегии
     * GET /api/marketing/v3/{analysisId}/strategy-preview
     * @param {string} analysisId - Идентификатор анализа
     * @returns {Promise<Object>} Описание рекомендуемой стратегии
     */
    async getStrategyPreview(analysisId) {
        try {
            const response = await AuthService.authFetch(`${API_BASE_URL}/api/marketing/v3/${analysisId}/strategy-preview`);
            const result = await response.json().catch(() => null);
            if (!response.ok) {
                throw new Error(result?.message || result?.error?.message || 'Ошибка при получении предпросмотра стратегии');
            }
            return result?.data ?? result;
        } catch (error) {
            console.error('Ошибка при предпросмотре стратегии v4.0:', error);
            throw error;
        }
    }

    /**
     * ЭТАП 3: Запуск генерации стратегии (с логотипом)
     * POST /api/marketing/v3/{analysisId}/strategy/generate
     * @param {string} analysisId - Идентификатор анализа
     * @param {FormData} formData - Объект FormData (содержит поля request Blob и необязательно logo File)
     * @returns {Promise<Object>} { strategyId: string }
     */
    async generateStrategy(analysisId, formData) {
        try {
            const response = await AuthService.authFetch(`${API_BASE_URL}/api/marketing/v3/${analysisId}/strategy/generate`, {
                method: 'POST',
                body: formData // Не указываем Content-Type, браузер сам поставит multipart/form-data с правильным boundary
            });
            const result = await response.json().catch(() => null);
            if (!response.ok) {
                throw new Error(result?.message || result?.error?.message || 'Ошибка при запуске генерации стратегии');
            }
            return result?.data ?? result;
        } catch (error) {
            console.error('Ошибка при запуске генерации стратегии v4.0:', error);
            throw error;
        }
    }

    /**
     * ЭТАП 4: Поллинг статуса стратегии
     * GET /api/marketing/v3/strategy/{strategyId}
     * @param {string} strategyId - Идентификатор стратегии
     * @returns {Promise<Object>} Данные стратегии, включая статус и результаты, когда готово
     */
    async getStrategyStatus(strategyId) {
        try {
            const response = await AuthService.authFetch(`${API_BASE_URL}/api/marketing/v3/strategy/${strategyId}`);
            const result = await response.json().catch(() => null);
            if (!response.ok) {
                throw new Error(result?.message || result?.error?.message || 'Ошибка при проверке статуса стратегии');
            }
            return result?.data ?? result;
        } catch (error) {
            console.error('Ошибка при проверке статуса стратегии v4.0:', error);
            throw error;
        }
    }
}

export default new MarketingV3Service();
