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

namespace GestionIntegral.Api.Data.Repositories.Distribucion
{
    public interface IStockBobinaRepository
    {
        Task<IEnumerable<StockBobina>> GetAllAsync( // Para listados generales, DTO se arma en servicio
            int? idTipoBobina,
            string? nroBobinaFilter,
            int? idPlanta,
            int? idEstadoBobina,
            string? remitoFilter,
            DateTime? fechaDesde,
            DateTime? fechaHasta,
            DateTime? fechaEstadoDesde,
            DateTime? fechaEstadoHasta);

        Task<StockBobina?> GetByIdAsync(int idBobina);
        Task<StockBobina?> GetByNroBobinaAsync(string nroBobina); // Para validar unicidad de NroBobina
        Task<StockBobina?> CreateAsync(StockBobina nuevaBobina, int idUsuario, IDbTransaction transaction);
        Task<bool> UpdateAsync(StockBobina bobinaAActualizar, int idUsuario, IDbTransaction transaction, string tipoMod = "Actualizada"); // tipoMod para historial
        Task<bool> DeleteAsync(int idBobina, int idUsuario, IDbTransaction transaction); // Solo si está en estado "Disponible"
        Task<IEnumerable<(StockBobinaHistorico Historial, string NombreUsuarioModifico, string? NombreTipoBobina, string? NombrePlanta, string? NombreEstadoBobina, string? NombrePublicacion, string? NombreSeccion)>> GetHistorialDetalladoAsync(
            DateTime? fechaDesde, DateTime? fechaHasta,
            int? idUsuarioModifico, string? tipoModificacion,
            int? idBobinaOriginal, int? idTipoBobinaFiltro, int? idPlantaFiltro, int? idEstadoBobinaFiltro);
    }
}