/// OA 模块数据库枚举常量。
///
/// PRD/Database §6 枚举取值统一维护点。
/// 枚举值（value）与数据库 VARCHAR 存储值一致，
/// labelKey 为 i18n 键，前端展示通过 `l10n.get(labelKey)` 获取。
class EnumEntry {
  final String value;
  final String labelKey;
  const EnumEntry(this.value, this.labelKey);
}

// ═══════════════════════════════════════════
//  §6.1 单据审批状态
// ═══════════════════════════════════════════
class ApprovalStatus {
  ApprovalStatus._();
  static const draft = EnumEntry('draft', 'draft');
  static const pending = EnumEntry('pending', 'statusPending');
  static const approved = EnumEntry('approved', 'statusApproved');
  static const rejected = EnumEntry('rejected', 'statusRejected');
  static const withdrawn = EnumEntry('withdrawn', 'statusWithdrawn');
  static const completed = EnumEntry('completed', 'completed');
  static const returned = EnumEntry('returned', 'returned');
  static const values = [draft, pending, approved, rejected, withdrawn];
}

// ═══════════════════════════════════════════
//  §6.2 付款状态
// ═══════════════════════════════════════════
class PaymentStatus {
  PaymentStatus._();
  static const unpaid = EnumEntry('unpaid', 'statusWaitPay');
  static const paid = EnumEntry('paid', 'paid');
  static const values = [unpaid, paid];
}

// ═══════════════════════════════════════════
//  §6.4 紧急程度
// ═══════════════════════════════════════════
class Urgency {
  Urgency._();
  static const normal = EnumEntry('normal', 'normal');
  static const urgent = EnumEntry('urgent', 'urgent');
  static const critical = EnumEntry('critical', 'filterCritical');
  static const values = [normal, urgent, critical];
}

// ═══════════════════════════════════════════
//  §6.9 加班类型
// ═══════════════════════════════════════════
class OtType {
  OtType._();
  static const workday = EnumEntry('workday', 'workdayOvertime');
  static const weekend = EnumEntry('weekend', 'weekendOvertime');
  static const holiday = EnumEntry('holiday', 'holidayOvertime');
  static const values = [workday, weekend, holiday];
}

// ═══════════════════════════════════════════
//  §6.10 补偿方式
// ═══════════════════════════════════════════
class CompensationType {
  CompensationType._();
  static const overtimePay = EnumEntry(
    'overtime_pay',
    'compensationOvertimePay',
  );
  static const compLeave = EnumEntry('comp_leave', 'compensationCompLeave');
  static const mixed = EnumEntry('mixed', 'compensationMixed');
  static const values = [overtimePay, compLeave, mixed];
}

// ═══════════════════════════════════════════
//  §6.11 用车目的
// ═══════════════════════════════════════════
class VehiclePurpose {
  VehiclePurpose._();
  static const reception = EnumEntry('reception', 'customerReception');
  static const business = EnumEntry('business', 'businessTrip');
  static const official = EnumEntry('official', 'official');
  static const values = [reception, business, official];
}

// ═══════════════════════════════════════════
//  §6.14 公告分类
// ═══════════════════════════════════════════
class AnnouncementType {
  AnnouncementType._();
  static const notice = EnumEntry('notice', 'noticeAnnouncement');
  static const policy = EnumEntry('policy', 'hrPolicy');
  static const activity = EnumEntry('activity', 'holidayActivity');
  static const values = [notice, policy, activity];
}
