using System.Threading.Tasks;
using Mindforge.API.Models.Requests;
using Mindforge.API.Services.Interfaces;
using Mindforge.API.Exceptions;

namespace Mindforge.API.Services
{
    public class FileService : IFileService
    {
        private readonly IAgentService _agentService;

        public FileService(IAgentService agentService)
        {
            _agentService = agentService;
        }

        public async Task<string> CheckFileAsync(FileCheckRequest request)
        {
            string systemPrompt;

            if (request.CheckType.ToLower() == "language")
            {
                systemPrompt = $@"Você é um revisor de textos sênior e especialista em língua portuguesa do Brasil.
Sua tarefa é analisar o texto fornecido e corrigir rigorosamente todos os erros gramaticais, de concordância, pontuação, garantindo clareza, coesão e fluidez.
Por favor, siga esta estrutura:
1. Retorne o texto completamente revisado e polido.
2. Não adicione nenhum texto adicional, apenas o texto revisado.
3. Não altere o sentido do texto, mantenha a mesma ideia. Apenas corrija os erros gramaticais, de concordância e pontuação.
Responda única e exclusivamente em português do Brasil.
Foque em textos de concursos públicos, principalmente para a banca Cebraspe.";
            }
            else if (request.CheckType.ToLower() == "content")
            {
                systemPrompt = $@"Você é um analista de conteúdo experiente, especializado em revisão crítica e verificação de fatos.
Sua tarefa é realizar uma análise rigorosa do texto fornecido, identificando erros lógicos, imprecisões de conteúdo, contradições internas e inconsistências argumentativas.
Por favor, siga esta estrutura:
1. Destaque cada problema encontrado no texto original.
2. Explique detalhadamente por que é um erro ou inconsistência.
3. Apresente sugestões claras e embasadas para reescrever ou corrigir os trechos problemáticos, melhorando a coerência e a lógica e a clareza do conteúdo.
Responda única e exclusivamente em português do Brasil e mantenha um tom analítico e construtivo.

Responda em tópicos para ser apresentados ao usuário, sendo sucinto e não extremamente detalhado.
Os resumos serão utilizados para concursos públicos, principalmente para a banca Cebraspe.
";
            }
            else
            {
                throw new UserException("Tipo de verificação inválido. Use 'language' ou 'content'.");
            }

            string userPrompt = $"Arquivo: {request.FileName}\nConteúdo:\n{request.FileContent}";

            return await _agentService.ProcessRequestAsync(systemPrompt, userPrompt);
        }
    }
}
