/// 대시보드 결재 항목에서 사용자의 역할을 구분한다.
enum DashboardApprovalRole {
  assigned(key: 'assigned', label: '배정됨'),
  requester(key: 'requester', label: '상신자', aliases: ['requested']),
  completed(key: 'completed', label: '기결재자');

  const DashboardApprovalRole({
    required this.key,
    required this.label,
    this.aliases = const [],
  });

  /// 백엔드가 내려주는 원시 값.
  final String key;

  /// UI에 노출할 한국어 라벨.
  final String label;

  /// 과거/대체 표기를 허용하기 위한 값.
  final List<String> aliases;

  /// 문자열에서 역할 정보를 복원한다.
  static DashboardApprovalRole? fromName(String? raw) {
    if (raw == null) {
      return null;
    }
    final normalized = raw.trim().toLowerCase();
    if (normalized.isEmpty) {
      return null;
    }
    for (final role in values) {
      if (role.key == normalized || role.aliases.contains(normalized)) {
        return role;
      }
    }
    return null;
  }
}

/// 결재 대기 요약 정보.
class DashboardPendingApproval {
  const DashboardPendingApproval({
    this.approvalId,
    required this.approvalNo,
    required this.title,
    required this.stepSummary,
    this.requestedAt,
    this.roles = const [],
  });

  /// 결재 고유 식별자(ID). 상세 조회가 필요할 때 사용된다.
  final int? approvalId;

  /// 결재 문서 번호
  final String approvalNo;

  /// 결재 제목
  final String title;

  /// 현재 단계/승인자 요약
  final String stepSummary;

  /// 상신 일시
  final DateTime? requestedAt;

  /// 로그인 사용자가 해당 결재에서 가진 역할 집합.
  final List<DashboardApprovalRole> roles;
}
