using GestionIntegral.Api.Models.Distribucion;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Data;

namespace GestionIntegral.Api.Data.Repositories.Distribucion
{
    public interface IPrecioRepository
    {
        Task<IEnumerable<Precio>> GetByPublicacionIdAsync(int idPublicacion);
        Task<Precio?> GetByIdAsync(int idPrecio);
        Task<bool> IsInUseAsync(int idPrecio, DateTime vigenciaD, DateTime? vigenciaH);
        Task<Precio?> GetActiveByPublicacionAndDateAsync(int idPublicacion, DateTime fecha, IDbTransaction? transaction = null);
        Task<Precio?> CreateAsync(Precio nuevoPrecio, int idUsuario, IDbTransaction transaction);
        Task<bool> UpdateAsync(Precio precioAActualizar, int idUsuario, IDbTransaction transaction);
        Task<bool> DeleteAsync(int idPrecio, int idUsuario, IDbTransaction transaction);
        // MODIFICADO: Añadir idUsuarioAuditoria
        Task<bool> DeleteByPublicacionIdAsync(int idPublicacion, int idUsuarioAuditoria, IDbTransaction transaction);
        Task<Precio?> GetPreviousActivePriceAsync(int idPublicacion, DateTime vigenciaDNuevo, IDbTransaction transaction);
        Task<IEnumerable<(PrecioHistorico Historial, string NombreUsuarioModifico)>> GetHistorialAsync(
        DateTime? fechaDesde, DateTime? fechaHasta,
        int? idUsuarioModifico, string? tipoModificacion,
        int? idPrecioOriginal, int? idPublicacionOriginal);
    }
}