// src/client/shared/api/repositories/SystemRepository.ts
// System Repository for log management operations

import { z } from 'zod';
import { BaseRepository } from '../BaseRepository';
import type { RequestConfig } from '../api.client';
import { 
  LogConfigSchema, 
  UpdateLogConfigSchema,
  type LogConfig,
  type UpdateLogConfigRequest
} from '@shared/contracts/logger';

// --- ИСПРАВЛЕННЫЕ СХЕМЫ (Без оберток) ---
// Интерсептор уже убрал { success: true, data: ... }, 
// поэтому мы валидируем только саму полезную нагрузку.

export const getLogConfigResponseSchema = LogConfigSchema;
export type GetLogConfigResponse = LogConfig;

export const updateLogConfigRequestSchema = UpdateLogConfigSchema;

export const updateLogConfigResponseSchema = LogConfigSchema;
export type UpdateLogConfigResponse = LogConfig;

/**
 * System Repository
 */
export class SystemRepository extends BaseRepository {
  protected basePath = '/system';

  /**
   * Получает текущую конфигурацию логов
   * ВАЖНО: Используем getNoCache, чтобы всегда видеть актуальный файл с сервера
   */
  async getLogConfig(): Promise<GetLogConfigResponse> {
    // ВРЕМЕННО: Убираем схему, чтобы исключить ошибку валидации
    const config: RequestConfig<GetLogConfigResponse> = {
      // schema: getLogConfigResponseSchema, <--- ЗАКОММЕНТИРУЙ ЭТО
    };
    
    // Делаем прямой запрос
    const response = await this.getNoCache<GetLogConfigResponse>('/logs', config);
    
    // ЖУЧОК: Смотрим в консоль браузера (F12)
    console.log('🐞 [DEBUG] Raw Server Config:', response);
    
    return response;
  }

  /**
   * Обновляет уровень логирования для указанного канала
   */
  async updateLogConfig(request: UpdateLogConfigRequest): Promise<UpdateLogConfigResponse> {
    const config: RequestConfig<UpdateLogConfigResponse> = {
      schema: updateLogConfigResponseSchema,
    };
    
    const response = await this.patch<UpdateLogConfigRequest, UpdateLogConfigResponse>('/logs', request, config);
    
    // Сбрасываем кэш на всякий случай
    this.invalidateCache();
    
    return response;
  }
}

/**
 * Синглтон экземпляр SystemRepository
 */
export const systemRepository = new SystemRepository();
