package com.escolapios.fctmongo.service.processor;

import com.escolapios.fctmongo.dto.GenerarDocumentoContext;
import com.escolapios.fctmongo.entity.Convenio;
import org.springframework.stereotype.Component;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Map;

@Component
public class ConvenioProcessor implements AnexoProcessor {

    private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("dd/MM/yyyy");

    @Override
    public String getTipoDocumento() { 
        return "CONVENIO"; 
    }

    @Override
    public void procesarDatosEspecificos(GenerarDocumentoContext ctx, Map<String, Object> data) {
        // 1. 🔄 Recuperamos tu nueva entidad unificada Convenio del record contextual
        Convenio dto = ctx.datos();
        if (dto == null) return;

        // 2. Datos del acuerdo e información general
        data.put("numeroAcuerdo", desinfectar(dto.getNumeroAcuerdo()));
        data.put("cursoAcademico", desinfectar(dto.getCursoAcademico()));
        
        if (dto.getFechaFirma() != null) {
            data.put("fechaFirma", dto.getFechaFirma().format(FORMATTER));
        } else {
            data.put("fechaFirma", "");
        }

        // 3. Datos de la Empresa (Extraídos de forma segura con los getters puente de Lombok)
        data.put("empresaNombre", desinfectar(dto.getEmpresaNombre()));
        data.put("direccion", desinfectar(dto.getEmpresaDireccion()));
        data.put("cif", desinfectar(dto.getCif()));
        data.put("municipio", desinfectar(dto.getMunicipio()));
        data.put("actividad", desinfectar(dto.getActividad()));
        data.put("contacto", desinfectar(dto.getContacto()));
        data.put("escrituraCargo", desinfectar(dto.getEscrituraCargo()));
        data.put("provincia", desinfectar(dto.getProvincia()));
        data.put("pais", desinfectar(dto.getPais()));
        data.put("cp", desinfectar(dto.getCp()));

        // 4. Datos del Profesor Tutor del Centro
        data.put("nombreProfesor", desinfectar(dto.getNombreProfesor()));
        data.put("apellidoProfesor", desinfectar(dto.getApellidosProfesor()));
        data.put("dniProfesor", desinfectar(dto.getDniProfesor()));
        data.put("emailProfesor", desinfectar(dto.getEmailProfesor()));

        // 5. ✅ ACTIVADO Y BLINDADO: Datos del primer Alumno del array de MongoDB
        var listaAlumnos = dto.getAlumnos();
        if (listaAlumnos != null && !listaAlumnos.isEmpty()) {
            var alumno = listaAlumnos.get(0);
            if (alumno != null) {
                data.put("alumnoNombre", desinfectar(alumno.getNombre()));
                data.put("alumnoApellidos", desinfectar(alumno.getApellidos()));
                data.put("alumnoDni", desinfectar(alumno.getDni()));
            }
        } else {
            data.put("alumnoNombre", "");
            data.put("alumnoApellidos", "");
            data.put("alumnoDni", "");
            data.put("alumnoCiclo", "");
        }

        data.put("fechaHoy", LocalDate.now().format(FORMATTER));
    }

    private String desinfectar(String valor) {
        return valor != null ? valor.trim() : "";
    }
}
