using GB5Shared.DTO.Framework.Criteria;
using GB5Shared.DTO.Framework.Login;
using TMSDAL.DTO.TrainingEnrollment;
namespace TMSBLL.TrainingEnrollment
{
public interface ITrainingEnrollmentBLL
{
// ════════════════════════════════════════════════════════════════════
// READ
// ════════════════════════════════════════════════════════════════════
/// Fetch full enrollment record by primary key (JSON).
Task GetTrainingEnrollment(int enrollmentId, LoginDTO loginDTO);
/// All enrollments for a training instance (JSON).
Task GetEnrollmentsByInstance(int instanceId, LoginDTO loginDTO);
/// All enrollments for an employee (JSON).
Task GetEnrollmentsByEmployee(int employeeId, LoginDTO loginDTO);
/// Full tenant enrollment list (JSON).
Task GetEnrollmentList(LoginDTO loginDTO);
/// Paged / filtered dropdown select-list (JSON).
Task GetSelectList(CriteriaDTO criteriaDTO, LoginDTO loginDTO, CancellationToken ct);
// ════════════════════════════════════════════════════════════════════
// WRITE
// ════════════════════════════════════════════════════════════════════
///
/// Create a new enrollment with capacity check, duplicate guard,
/// and AutoNumber generation. Waitlists when instance is full.
///
Task SaveTrainingEnrollment(TrainingEnrollmentDTO dto, LoginDTO loginDTO);
///
/// Approve or reject an enrollment at the Manager or HR tier.
/// Status transition is validated per tier before actioning.
///
Task ApproveEnrollment(ApprovalActionDTO dto, LoginDTO loginDTO);
///
/// Withdraw an enrollment. Only valid from active statuses.
/// Decrements instance enrolled count when a confirmed seat was held.
///
Task WithdrawEnrollment(WithdrawEnrollmentDTO dto, LoginDTO loginDTO);
/// Soft-delete an enrollment (STATUS = 0).
Task DeleteTrainingEnrollment(int enrollmentId, LoginDTO loginDTO);
}
}