using System;
namespace FrameworkDAL.DTO.Scheduler
{
///
/// Job Definition DTO
/// ------------------
/// ✔ Maps directly to MJOBDEFINE + TSCHEDULER
/// ✔ Supports SQL alias compatibility
/// ✔ Does NOT persist NextRunTime
/// ✔ NextRunTime is computed dynamically in BLL
///
public class JobDefineDTO
{
// -------------------------------------------------
// Primary identifiers (DB-backed)
// -------------------------------------------------
public int JobDefineId { get; set; }
public string JobDefineJobName { get; set; } = string.Empty;
public int JobDefineSchedulerId { get; set; }
public int JobDefineWebServiceId { get; set; }
public int JobDefineCriteriaConfigId { get; set; }
// -------------------------------------------------
// Runtime tracking (DB-backed)
// -------------------------------------------------
public DateTime? JobDefineLastRunTime { get; set; }
// -------------------------------------------------
// Tenant / priority / status (DB-backed)
// -------------------------------------------------
public int BaseTenantId { get; set; }
public int Priority { get; set; }
public int Status { get; set; }
// -------------------------------------------------
// Scheduler configuration (DB-backed)
// -------------------------------------------------
public string CronExpression { get; set; } = string.Empty;
public short EveryNoOfHours { get; set; }
public short EveryNoOfMinutes { get; set; }
///
/// Single daily execution time (HH:mm or HH:mm:ss)
///
public string OccursAtTime { get; set; } = string.Empty;
///
/// Multiple execution times (comma-separated)
///
public string OccursAtMultipleTime { get; set; } = string.Empty;
// -------------------------------------------------
// ⚠️ COMPUTED – NOT DB-BACKED
// -------------------------------------------------
///
/// Computed dynamically in BLL (Cron / Interval / Time-based)
/// MUST NOT be persisted or relied on from DB
///
public DateTime? NextRunTime { get; set; }
///
/// Optional derived value for interval schedulers
///
public int IntervalInSeconds
=> (EveryNoOfHours * 3600) + (EveryNoOfMinutes * 60);
// -------------------------------------------------
// SQL alias compatibility for BLL (GB5 STANDARD)
// -------------------------------------------------
public int JobId
{
get => JobDefineId;
set => JobDefineId = value;
}
public int TenantId
{
get => BaseTenantId;
set => BaseTenantId = value;
}
public string JobName
{
get => JobDefineJobName;
set => JobDefineJobName = value;
}
public int WebServiceId
{
get => JobDefineWebServiceId;
set => JobDefineWebServiceId = value;
}
public int SchedulerId
{
get => JobDefineSchedulerId;
set => JobDefineSchedulerId = value;
}
public int CriteriaConfigId
{
get => JobDefineCriteriaConfigId;
set => JobDefineCriteriaConfigId = value;
}
public DateTime? LastRunOn
{
get => JobDefineLastRunTime;
set => JobDefineLastRunTime = value;
}
}
}