using GestionIntegral.Api.Models.Impresion; // Para Planta
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Data; // Para IDbTransaction

namespace GestionIntegral.Api.Data.Repositories.Impresion
{
    public interface IPlantaRepository
    {
        Task<IEnumerable<Planta>> GetAllAsync(string? nombreFilter, string? detalleFilter);
        Task<Planta?> GetByIdAsync(int id);
        Task<Planta?> CreateAsync(Planta nuevaPlanta, int idUsuario, IDbTransaction transaction);
        Task<bool> UpdateAsync(Planta plantaAActualizar, int idUsuario, IDbTransaction transaction);
        Task<bool> DeleteAsync(int id, int idUsuario, IDbTransaction transaction); // Borrado físico con historial
        Task<bool> ExistsByNameAsync(string nombre, int? excludeId = null);
        Task<bool> IsInUseAsync(int id); // Verificar si se usa en bob_StockBobinas o bob_RegPublicaciones
        Task<IEnumerable<(PlantaHistorico Historial, string NombreUsuarioModifico)>> GetHistorialAsync(
        DateTime? fechaDesde, DateTime? fechaHasta,
        int? idUsuarioModifico, string? tipoModificacion,
        int? idPlantaOriginal);
    }
}