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

namespace GestionIntegral.Api.Data.Repositories.Distribucion
{
    public interface IOtroDestinoRepository
    {
        Task<IEnumerable<OtroDestino>> GetAllAsync(string? nombreFilter);
        Task<IEnumerable<OtroDestinoDropdownDto>> GetAllDropdownAsync();
        Task<OtroDestino?> GetByIdAsync(int id);
        Task<OtroDestino?> CreateAsync(OtroDestino nuevoDestino, int idUsuario, IDbTransaction transaction);
        Task<bool> UpdateAsync(OtroDestino destinoAActualizar, int idUsuario, IDbTransaction transaction);
        Task<bool> DeleteAsync(int id, int idUsuario, IDbTransaction transaction);
        Task<bool> ExistsByNameAsync(string nombre, int? excludeId = null);
        Task<bool> IsInUseAsync(int id); // Verificar si se usa en dist_SalidasOtrosDestinos
        Task<IEnumerable<(OtroDestinoHistorico Historial, string NombreUsuarioModifico)>> GetHistorialAsync(
            DateTime? fechaDesde, DateTime? fechaHasta,
            int? idUsuarioModifico, string? tipoModificacion,
            int? idOtroDestinoOriginal);
    }
}