package com.cos.service;

import com.cos.entity.CertificateOfSponsorship;
import com.cos.repository.CosRepository;

import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import javax.transaction.Transactional;
import java.util.List;
import java.util.Optional;
import java.util.logging.Logger;

/**
 * Business service layer for Certificate of Sponsorship operations.
 * Coordinates between the JSF backing beans and the repository layer.
 */
@ApplicationScoped
public class CosService {

    private static final Logger LOGGER = Logger.getLogger(CosService.class.getName());

    @Inject
    private CosRepository cosRepository;

    /**
     * Save or update a CoS record.
     */
    @Transactional
    public CertificateOfSponsorship saveOrUpdate(CertificateOfSponsorship cos) {
        LOGGER.info("Saving CoS record: " + cos.getCertificateNumber());
        return cosRepository.save(cos);
    }

    /**
     * Retrieve all CoS records.
     */
    public List<CertificateOfSponsorship> findAll() {
        return cosRepository.findAll();
    }

    /**
     * Find a CoS record by ID.
     */
    public Optional<CertificateOfSponsorship> findById(Long id) {
        return cosRepository.findById(id);
    }

    /**
     * Find a CoS record by certificate number.
     */
    public Optional<CertificateOfSponsorship> findByCertificateNumber(String certNumber) {
        return cosRepository.findByCertificateNumber(certNumber);
    }

    /**
     * Delete a CoS record by ID.
     */
    @Transactional
    public void delete(Long id) {
        LOGGER.info("Deleting CoS record with ID: " + id);
        cosRepository.delete(id);
    }

    /**
     * Count total CoS records.
     */
    public long count() {
        return cosRepository.count();
    }
}