package com.sc.sicanet.migracion_sicanet.service;

import com.sc.sicanet.migracion_sicanet.DTO.PersonaDTO;
import com.sc.sicanet.migracion_sicanet.entity.*;
import com.sc.sicanet.migracion_sicanet.repository.*;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.Optional;

@Service
public class PersonaServiceImpl implements PersonaService {
    @Autowired
    private PersonaRepository personaRepository;
    @Autowired
    private CatGeoEntidadesRepository catGeoEntidadesRepository;
    @Autowired
    private CatEstadoCivilRepository catEstadoCivilRepository;

    @PersistenceContext
    private EntityManager entityManager;

    public Optional<Persona> consultaPersonas(Persona persona) {
        return persona.getTipoPersona().equals("F")
                ? personaRepository.findByCurp(persona.getCurp())
                : personaRepository.findByRfc(persona.getRfc());
    }

    public Persona guardarPersonas(Persona persona) {
        return personaRepository.save(persona);
    }

    public Persona convertirADatosDePersona(PersonaDTO personaDTO) {
        LocalDateTime fechaActual = LocalDateTime.now();
        Optional<CatGeoEntidades> catGeoEntidades = catGeoEntidadesRepository.findByEntidad(personaDTO.getEntidad_nacimiento());
        Optional<CatEstadoCivil> catEstadoCivil = catEstadoCivilRepository.findByPrefijoBuro(personaDTO.getEstado_civil());

        Persona persona = new Persona(fechaActual, personaDTO.getTipo_persona(), personaDTO.getNombre(),
                personaDTO.getApaterno(), personaDTO.getAmaterno(), catGeoEntidades.isPresent() ? catGeoEntidades.get().getPkCatEntidad() : 0,
                personaDTO.getLugar_nacimiento(), personaDTO.getFecha_nacimiento(), personaDTO.getSexo(), personaDTO.getRfc(), personaDTO.getCurp(),
                catEstadoCivil.isPresent() ? catEstadoCivil.get().getPrefijoBuro() : "", "", 0, "", "",
                "", "", 0, 0, 1, "API Migracion",
                "A", 1);
        persona.setFechaControl(fechaActual);
        persona.setFechaRegistro(fechaActual);
        Optional<Persona> personaExistente = consultaPersonas(persona);
        if(!personaExistente.isEmpty()){
            persona.setPkPersona(personaExistente.get().getPkPersona());
            persona.setFechaRegistro(personaExistente.get().getFechaRegistro());
            persona.setFechaControl(personaExistente.get().getFechaModificacion());
        }
        return persona;
    }

}
