package com.sc.sicanet.migracion_sicanet.service;

import java.util.List;
import java.util.Optional;

import org.springframework.stereotype.Service;

import com.sc.sicanet.migracion_sicanet.entity.Prestamos;
import com.sc.sicanet.migracion_sicanet.repository.PrestamosRepository;

import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import jakarta.persistence.criteria.CriteriaBuilder;
import jakarta.persistence.criteria.CriteriaQuery;
import jakarta.persistence.criteria.Predicate;
import jakarta.persistence.criteria.Root;

@Service
public class PrestamosServiceImpl implements PrestamosService {
    @PersistenceContext
    private EntityManager entityManager;

    private final PrestamosRepository repository;

    public PrestamosServiceImpl(PrestamosRepository repository) {
        this.repository = repository;
    }

    @Override
    public List<Prestamos> findAll() {
        return (List<Prestamos>) repository.findAll();
    }

    @Override
    public Optional<Prestamos> findById(int id) {
        return repository.findById(id);
    }

    @Override
    public Optional<Prestamos> findByCuentaSTP(String cuentaSTP) {
        try {
            CriteriaBuilder cb = entityManager.getCriteriaBuilder();
            CriteriaQuery<Prestamos> query = cb.createQuery(Prestamos.class);
            Root<Prestamos> prestamos = query.from(Prestamos.class);

            Predicate predicate = cb.equal(prestamos.get("cuentaStp"),cuentaSTP);
            query.select(prestamos).where(predicate);

            Optional<Prestamos> prestamo = Optional.ofNullable(entityManager.createQuery(query).getSingleResult());

            System.out.println("prestamo -> " + prestamo.get());

            return prestamo;

        } catch (Exception e) {
            System.out.println("Error: " + e);
            return Optional.empty();
        } finally {
            entityManager.close();
            // emf.close();
        }
    }
}
