package com.imprimelibros.erp.configuracion.margenes_presupuestos;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import com.imprimelibros.erp.presupuesto.Presupuesto.TipoEncuadernacion;
import com.imprimelibros.erp.presupuesto.Presupuesto.TipoCubierta;

public interface MargenPresupuestoDao
        extends JpaRepository<MargenPresupuesto, Long>, JpaSpecificationExecutor<MargenPresupuesto> {

    @Query("""
                SELECT COUNT(m) FROM MargenPresupuesto m
                 WHERE m.deleted = false
                   AND m.tipoEncuadernacion = :enc
                   AND m.tipoCubierta = :cub
                   AND (:id IS NULL OR m.id <> :id)
                   AND NOT (m.tiradaMax < :min OR m.tiradaMin > :max)
            """)
    long countOverlaps(
            @Param("enc") TipoEncuadernacion enc,
            @Param("cub") TipoCubierta cub,
            @Param("min") Integer min,
            @Param("max") Integer max,
            @Param("id") Long id);

    @Query("""
                SELECT m FROM MargenPresupuesto m
                 WHERE m.deleted = false
                   AND m.tipoEncuadernacion = :enc
                   AND m.tipoCubierta = :cub
                   AND :tirada BETWEEN m.tiradaMin AND m.tiradaMax
            """)
    MargenPresupuesto findByTipoAndTirada(
            @Param("enc") TipoEncuadernacion enc,
            @Param("cub") TipoCubierta cub,
            @Param("tirada") Integer tirada);
}
