package com.sc.sicanet.migracion_sicanet.service;

import com.sc.sicanet.migracion_sicanet.DTO.InformacionPepsDTO;
import com.sc.sicanet.migracion_sicanet.entity.InformacionPEPS;
import com.sc.sicanet.migracion_sicanet.entity.Persona;
import com.sc.sicanet.migracion_sicanet.repository.InformacionPepsRepository;
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 InformacionPepsServiceImpl implements InformacionPepsService {
    @Autowired
    private InformacionPepsRepository informacionPepsRepository;

    @PersistenceContext
    private EntityManager entityManager;

    public InformacionPEPS guardarInformacionPeps(InformacionPEPS informacionPEPS) {
        return informacionPepsRepository.save(informacionPEPS);
    }

    @Override
    public Optional<InformacionPEPS> consultarInformacionPEPS(Persona persona) {
        return informacionPepsRepository.findByPersonaAndEstatus(persona, "A");
    }

    private String convertirBooleanAValor(Boolean valor) {
        return Boolean.TRUE.equals(valor) ? "S" : "N";
    }

    public InformacionPEPS convertirDatosDeInformacionPeps(InformacionPepsDTO informacionPepsDTO, Persona persona) {
        LocalDateTime fechaActual = LocalDateTime.now();
        String nacional = convertirBooleanAValor(informacionPepsDTO.getPoliticamente_expuesta_nacional());
        String internacional = convertirBooleanAValor(informacionPepsDTO.getPoliticamente_expuesta_internacional());
        String relacion = convertirBooleanAValor(informacionPepsDTO.getRelacion_politicamente_expuesta());

        InformacionPEPS informacionPEPS =
                new InformacionPEPS(fechaActual, nacional, internacional, relacion,0, "API Migración","A",1,"");

        informacionPEPS.setFechaControl(fechaActual);
        informacionPEPS.setFechaRegistro(fechaActual);
        if(persona.getPkPersona() != 0){
            Optional<InformacionPEPS> informacionPEPSExistente = consultarInformacionPEPS(persona);
            if(informacionPEPSExistente.isPresent()){
                informacionPEPS.setPkPldCatPersonasPepsCuestionario(informacionPEPSExistente.get().getPkPldCatPersonasPepsCuestionario());
                informacionPEPS.setFechaControl(informacionPEPSExistente.get().getFechaControl());
                informacionPEPS.setFechaRegistro(informacionPEPSExistente.get().getFechaRegistro());
            }
        }

        return informacionPEPS;
    }
}
