import { AssetStatus, TicketType } from '../types';

function s(raw: unknown): string {
  return raw == null ? '' : String(raw);
}

/** Trạng thái phiếu ticket (badge / nhãn) */
export function ticketStatusVi(raw: string): string {
  const k = s(raw);
  const map: Record<string, string> = {
    Open: 'Mở',
    Assigned: 'Đã phân công',
    InProgress: 'Đang xử lý',
    'In Progress': 'Đang xử lý',
    PendingParts: 'Chờ vật tư',
    Resolved: 'Đã giải quyết',
    Closed: 'Đã đóng',
  };
  return map[k] ?? k;
}

/** Mức độ ưu tiên (ticket / WO — WO không có Critical) */
export function ticketPriorityVi(raw: string): string {
  const map: Record<string, string> = {
    Low: 'Thấp',
    Medium: 'Trung bình',
    High: 'Cao',
    Critical: 'Khẩn cấp',
  };
  const k = s(raw);
  return map[k] ?? k;
}

/** Loại phiếu ticket */
export function ticketTypeVi(type: TicketType | string): string {
  const t = s(type);
  const map: Record<string, string> = {
    [TicketType.CM]: 'Bảo trì khắc phục',
    [TicketType.PM]: 'Bảo trì phòng ngừa',
    [TicketType.CLEANING]: 'Vệ sinh',
    [TicketType.INSPECTION]: 'Kiểm tra',
    [TicketType.PREDICTIVE]: 'Bảo trì dự đoán',
  };
  return map[t] ?? t;
}

/** Trạng thái work order */
export function workOrderStatusVi(raw: string): string {
  const k = s(raw);
  const map: Record<string, string> = {
    Draft: 'Nháp',
    Approved: 'Đã duyệt',
    InProgress: 'Đang thực hiện',
    'In Progress': 'Đang thực hiện',
    Completed: 'Hoàn thành',
    Cancelled: 'Đã hủy',
    Verified: 'Đã xác nhận',
  };
  return map[k] ?? k;
}

/** Loại work order */
export function workOrderTypeVi(raw?: string): string {
  const t = s(raw);
  const map: Record<string, string> = {
    CM: 'Khắc phục (CM)',
    PM: 'Ngăn ngừa (PM)',
    Cleaning: 'Vệ sinh',
    Inspection: 'Kiểm tra',
    Upgrade: 'Nâng cấp',
  };
  return map[t] ?? t;
}

/** Trạng thái lịch PM */
export function pmScheduleStatusVi(raw: string): string {
  const k = s(raw);
  const map: Record<string, string> = {
    Active: 'Đang hoạt động',
    Paused: 'Tạm dừng',
    Inactive: 'Không hoạt động',
  };
  return map[k] ?? k;
}

/** Trạng thái tài sản (giá trị enum AssetStatus) */
export function assetStatusVi(status: AssetStatus | string): string {
  const k = s(status);
  const map: Record<string, string> = {
    [AssetStatus.OPERATIONAL]: 'Hoạt động',
    [AssetStatus.MAINTENANCE]: 'Bảo trì',
    [AssetStatus.INACTIVE]: 'Không hoạt động',
    [AssetStatus.DECOMMISSIONED]: 'Đã thanh lý',
    [AssetStatus.FAULTY]: 'Lỗi',
  };
  return map[k] ?? k;
}

/** Loại dòng trong lịch sử WO/Ticket trên chi tiết tài sản */
export function assetHistoryKindVi(kind: string): string {
  const k = s(kind).trim();
  if (k === 'Ticket') return 'Phiếu sự cố';
  if (k === 'Work Order') return 'Lệnh công việc';
  return k;
}

export function assetHistoryRowStatusVi(kind: string, statusRaw: unknown): string {
  const kindNorm = s(kind).trim();
  const st = s(statusRaw);
  if (!st) return '—';
  if (kindNorm === 'Ticket') return ticketStatusVi(st);
  if (kindNorm === 'Work Order') return workOrderStatusVi(st);
  return st;
}

/** Loại báo cáo */
export function reportTypeVi(raw: string): string {
  const k = s(raw);
  const map: Record<string, string> = {
    Daily: 'Theo ngày',
    Monthly: 'Theo tháng',
    Audit: 'Audit',
    Financial: 'Tài chính',
    Custom: 'Tùy chỉnh',
  };
  return map[k] ?? k;
}

/** Trạng thái báo cáo (tệp đã sinh) */
export function reportStatusVi(raw: string): string {
  const k = s(raw);
  const map: Record<string, string> = {
    Ready: 'Sẵn sàng',
    Processing: 'Đang xử lý',
    Failed: 'Thất bại',
  };
  return map[k] ?? k;
}

/** Mức độ sự cố HSE */
export function hseSeverityVi(raw: string): string {
  const k = s(raw);
  const map: Record<string, string> = {
    Critical: 'Nghiêm trọng',
    High: 'Cao',
    Medium: 'Trung bình',
    Low: 'Thấp',
  };
  return map[k] ?? k;
}

/** Trạng thái xử lý sự cố HSE (đơn giản) */
export function hseIncidentStatusVi(raw: string): string {
  const k = s(raw);
  const map: Record<string, string> = {
    Open: 'Mở',
    Closed: 'Đã đóng',
    Resolved: 'Đã xử lý',
    InProgress: 'Đang xử lý',
  };
  return map[k] ?? k;
}

/** Mức độ cảnh báo hệ thống */
export function alertSeverityVi(raw: string): string {
  const k = s(raw);
  const map: Record<string, string> = {
    Info: 'Thông tin',
    Warning: 'Cảnh báo',
    Critical: 'Khẩn cấp',
  };
  return map[k] ?? k;
}

/** Loại thông báo trong hệ thống */
export function alertTypeVi(raw: string): string {
  const k = s(raw);
  const map: Record<string, string> = {
    LowStock: 'Tồn kho thấp',
    PMSchedule: 'Lịch PM',
    TicketSLA: 'SLA phiếu',
    System: 'Hệ thống',
  };
  return map[k] ?? k;
}

/** Segment dự án (badge topbar) */
export function projectSegmentVi(segment: string): string {
  const k = s(segment).toLowerCase();
  if (k === 'residential') return 'Khu dân cư';
  if (k === 'commercial') return 'Thương mại';
  return segment;
}

/** Danh mục vật tư */
export function inventoryCategoryVi(raw: string): string {
  const k = s(raw);
  const map: Record<string, string> = {
    CriticalSpare: 'Vật tư dự phòng',
    'Critical Spare': 'Vật tư dự phòng',
    Consumable: 'Vật tư tiêu hao',
    Tool: 'Công cụ',
    Equipment: 'Thiết bị',
    'Safety Gear': 'An toàn',
  };
  return map[k] ?? k;
}

/** Loại phiếu kho (xuất/nhập) */
export function inventoryTxTypeVi(raw: string): string {
  const k = s(raw);
  if (k === 'In') return 'Nhập kho';
  if (k === 'Out') return 'Xuất kho';
  return k;
}
