using OnlyOneAccessTemplate.Services.OnlyOneAccessTemplate.Services;

namespace OnlyOneAccessTemplate.Services
{
    public class ImageToTextConverterService : BaseConverterService
    {
        private readonly HttpClient _httpClient;

        public override string ConverterType => "image-ocr";
        public override string ConverterName => "Image to Text (OCR)";

        public ImageToTextConverterService(ILogger<ImageToTextConverterService> logger,
            IConfiguration configuration, HttpClient httpClient)
            : base(logger, configuration)
        {
            _httpClient = httpClient;
        }

        public override async Task<ConversionResult> ConvertAsync(ConversionRequest request)
        {
            try
            {
                if (request.FileInput == null)
                {
                    return new ConversionResult(false, ErrorMessage: "Nenhuma imagem fornecida");
                }

                // Aqui você integraria com um serviço de OCR real como:
                // - Azure Computer Vision
                // - Google Cloud Vision
                // - AWS Textract
                // - Tesseract local

                // Por agora, simular processamento
                await Task.Delay(2000); // Simular processamento

                // Exemplo de resultado simulado
                var extractedText = $"Texto extraído da imagem: {request.FileInput.FileName}\n\n" +
                                  "Este é um exemplo de texto que seria extraído da imagem usando OCR.\n" +
                                  "Em uma implementação real, aqui estaria o texto real da imagem.";

                return new ConversionResult(true, OutputText: extractedText);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "Erro na conversão de imagem para texto");
                return new ConversionResult(false, ErrorMessage: "Erro ao processar imagem");
            }
        }

        public override ConverterConfiguration GetConfiguration(string language)
        {
            var texts = GetLocalizedTexts(language);
            texts["ConverterTitle"] = language switch
            {
                "en" => "IMAGE TO TEXT CONVERTER - OCR ONLINE",
                "es" => "CONVERTIDOR DE IMAGEN A TEXTO - OCR EN LÍNEA",
                _ => "CONVERSOR DE IMAGEM PARA TEXTO - OCR ONLINE"
            };

            texts["ConverterDescription"] = language switch
            {
                "en" => "Extract text from images using Optical Character Recognition technology",
                "es" => "Extrae texto de imágenes usando tecnología de Reconocimiento Óptico de Caracteres",
                _ => "Extraia texto de imagens usando tecnologia de Reconhecimento Óptico de Caracteres"
            };

            texts["SelectFileText"] = language switch
            {
                "en" => "SELECT IMAGE",
                "es" => "SELECCIONAR IMAGEN",
                _ => "SELECIONAR IMAGEM"
            };

            texts["FileHelpText"] = language switch
            {
                "en" => "Max file size: 15MB. Supported formats: JPG, PNG, PDF, TIFF",
                "es" => "Tamaño máximo: 15MB. Formatos soportados: JPG, PNG, PDF, TIFF",
                _ => "Tamanho máximo: 15MB. Formatos suportados: JPG, PNG, PDF, TIFF"
            };

            return new ConverterConfiguration
            {
                ConverterType = "file",
                OutputType = "text",
                AcceptedFileTypes = new[] { ".jpg", ".jpeg", ".png", ".pdf", ".tiff", ".bmp" },
                MaxFileSize = 15 * 1024 * 1024,
                HasAdvancedOptions = true,
                AllowShare = false, // OCR pode conter informações sensíveis
                LocalizedTexts = texts
            };
        }
    }
}
