package com.escolapios.fctmongo.service.processor;

import com.escolapios.fctmongo.dto.GenerarDocumentoContext;
import com.escolapios.fctmongo.entity.Convenio;
import com.escolapios.fctmongo.entity.Alumno;
import org.springframework.stereotype.Component;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Map;

@Component
public class Anexo6Processor implements AnexoProcessor {

    private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("dd/MM/yyyy");

    @Override
    public String getTipoDocumento() { 
        return "ANEXO_6"; 
    }

    @Override
    public void procesarDatosEspecificos(GenerarDocumentoContext ctx, Map<String, Object> data) {
        Convenio dto = ctx.datos();
        if (dto == null) return;

        // 1. 📅 Datos globales y firmas
        data.put("fechaHoy", LocalDate.now().format(FORMATTER));
        data.put("cursoAcademico", dto.getCursoAcademico() != null ? dto.getCursoAcademico() : "");

        // 2. 🏢 Datos de la Empresa
        data.put("cifEmpresa", dto.getEmpresa().getCif() != null ? dto.getEmpresa().getCif() : "");
        data.put("emailEmpresa", dto.getEmpresa().getEmail() != null ? dto.getEmpresa().getEmail() : "");
        data.put("telefonoEmpresa", dto.getEmpresa().getTelefono() != null ? dto.getEmpresa().getTelefono() : "");

        // 3. 👨‍🏫 Datos del Profesor / Tutor Docente (Primera ocurrencia del Array)
        var listaProfesores = dto.getProfesores(); // Revisa si tu getter se llama getProfesores() o getProfesor()
        if (listaProfesores != null && !listaProfesores.isEmpty()) {
            var prof = listaProfesores.get(0);
            if (prof != null) {
                String profCompleto = ((prof.getNombre() != null ? prof.getNombre() : "") + " " + 
                                      (prof.getApellidos() != null ? prof.getApellidos() : "")).trim();
                data.put("nombreProfesor", profCompleto);
                data.put("emailProfesor", prof.getEmail() != null ? prof.getEmail() : "");
                data.put("telefonoProfesor", prof.getTelefono() != null ? prof.getTelefono() : "");
            }
        } else {
            data.put("nombreProfesor", "");
            data.put("emailProfesor", "");
            data.put("telefonoProfesor", "");
        }

        // 4. 👔 Datos del Tutor de la Empresa / Laboral (Primera ocurrencia del Array)
        var listaTutores = dto.getTutoresEmpresa(); // Revisa si tu getter se llama getTutores() o getTutor laboral()
        if (listaTutores != null && !listaTutores.isEmpty()) {
            var tutor = listaTutores.get(0);
            if (tutor != null) {
                data.put("nombreTutor", tutor.getNombre() != null ? tutor.getNombre() : "");
                data.put("apellidosTutor", tutor.getApellidos() != null ? tutor.getApellidos() : "");
                data.put("emailTutor", tutor.getEmail() != null ? tutor.getEmail() : "");
                data.put("telefonoTutor", tutor.getTelefono() != null ? tutor.getTelefono() : "");
            }
        } else {
            data.put("nombreTutor", "");
            data.put("apellidosTutor", "");
            data.put("emailTutor", "");
            data.put("telefonoTutor", "");
        }

           // 5. 👥 Datos específicos del Alumno Principal (Posición 0)
        if (dto.getAlumnos() != null && !dto.getAlumnos().isEmpty()) {
            Alumno alu = dto.getAlumnos().get(0);
            
            // Datos personales del estudiante
            data.put("emailAlumno", alu.getEmail() != null ? alu.getEmail() : "");
            data.put("telefonoAlumno", alu.getTelefono() != null ? alu.getTelefono() : "");

            // 🟢 MAPEO BLINDADO DE FECHAS Y HORARIOS (Doble clave por seguridad con tu Word)
            if (alu.getFechaInicio() != null) {
                String fInicioFormateada = alu.getFechaInicio().format(FORMATTER);
                data.put("fechaInicio", fInicioFormateada);
                data.put("fechainicio", fInicioFormateada); // Por si en el Word está en minúsculas
            } else {
                data.put("fechaInicio", "");
                data.put("fechainicio", "");
            }

            if (alu.getFechaFin() != null) {
                String fFinFormateada = alu.getFechaFin().format(FORMATTER);
                data.put("fechaFin", fFinFormateada);
                data.put("fechafin", fFinFormateada);
            } else {
                data.put("fechaFin", "");
                data.put("fechafin", "");
            }

            // Horarios de la jornada
            String hInicio = alu.getHoraInicio() != null ? alu.getHoraInicio() : "";
            data.put("horaInicio", hInicio);
            data.put("horainicio", hInicio);

            String hFin = alu.getHoraFin() != null ? alu.getHoraFin() : "";
            data.put("horaFin", hFin);
            data.put("horafin", hFin);

            data.put("totalHoras", alu.getTotalHorasFormacion() != null ? String.valueOf(alu.getTotalHorasFormacion()) : "0");
            
            System.out.println("⏱️ [Processor] Fechas (" + alu.getFechaInicio() + ") y horarios inyectados en el mapa de control.");
        } else {
            System.out.println("⚠️ Advertencia: No hay alumnos en el Convenio para extraer metadatos.");
        }
    }
}
