export interface Category {
  id: string;
  name: string;
  leaveDays: number;
  benefitsEligible: boolean;
  probationMonths: number;
  noticeDays: number;
  contractRenewalDays: number;
  benefits: string[];
  color: string;
  isCustom?: boolean;
}

export interface Grade {
  id: string;
  level: number;
  title: string;
  categoryId: string;
  minSalary: number;
  midSalary: number;
  maxSalary: number;
  currency: string;
  effectiveDate: string;
  minYears: number;
  trainingHoursRequired: number;
  performanceRatingRequired: number;
}

export interface DeptGradeMapping {
  id: string;
  department: string;
  minGrade: number;
  maxGrade: number;
  grades: number[];
}

export interface PositionGradeMapping {
  id: string;
  position: string;
  department: string;
  defaultGrade: number;
  allowOverride: boolean;
}

export interface GradeChangeRecord {
  id: string;
  employeeId: string;
  employeeName: string;
  department: string;
  oldGrade: number;
  newGrade: number;
  effectiveDate: string;
  reason: 'promotion' | 'reclassification' | 'demotion' | 'initial';
  approver: string;
  approverSignature: boolean;
  status: 'pending' | 'approved' | 'rejected';
  notes: string;
}

export const initialCategories: Category[] = [
  { id: 'perm', name: 'Permanent', leaveDays: 30, benefitsEligible: true, probationMonths: 6, noticeDays: 60, contractRenewalDays: 0, benefits: ['Medical Cover', 'Pension Scheme', 'Group Life Assurance', 'Annual Leave Allowance', 'Housing Allowance', 'Transport Allowance'], color: '#059669' },
  { id: 'contract', name: 'Contract', leaveDays: 30, benefitsEligible: true, probationMonths: 3, noticeDays: 30, contractRenewalDays: 30, benefits: ['Medical Cover (partial)', 'NSSF & NHIF', 'Group Life Assurance'], color: '#2563eb' },
  { id: 'temp', name: 'Temporary', leaveDays: 21, benefitsEligible: false, probationMonths: 0, noticeDays: 14, contractRenewalDays: 14, benefits: ['NHIF Only', 'NSSF Only'], color: '#d97706' },
  { id: 'intern', name: 'Intern', leaveDays: 15, benefitsEligible: false, probationMonths: 0, noticeDays: 7, contractRenewalDays: 7, benefits: ['Monthly Stipend', 'NHIF Cover'], color: '#7c3aed' },
  { id: 'consultant', name: 'Consultant', leaveDays: 0, benefitsEligible: false, probationMonths: 0, noticeDays: 30, contractRenewalDays: 14, benefits: ['Professional Fee', 'Withholding Tax Applied'], color: '#b828a0' },
];

export const initialGrades: Grade[] = [
  { id: 'g1', level: 1, title: 'Intern / Attachee', categoryId: 'intern', minSalary: 15000, midSalary: 18000, maxSalary: 22000, currency: 'KSh', effectiveDate: '2024-01-01', minYears: 0, trainingHoursRequired: 20, performanceRatingRequired: 0 },
  { id: 'g2', level: 2, title: 'Junior Officer', categoryId: 'temp', minSalary: 28000, midSalary: 35000, maxSalary: 42000, currency: 'KSh', effectiveDate: '2024-01-01', minYears: 1, trainingHoursRequired: 40, performanceRatingRequired: 2 },
  { id: 'g3', level: 3, title: 'Officer I', categoryId: 'contract', minSalary: 45000, midSalary: 55000, maxSalary: 65000, currency: 'KSh', effectiveDate: '2024-01-01', minYears: 2, trainingHoursRequired: 60, performanceRatingRequired: 3 },
  { id: 'g4', level: 4, title: 'Officer II', categoryId: 'contract', minSalary: 60000, midSalary: 72000, maxSalary: 85000, currency: 'KSh', effectiveDate: '2024-01-01', minYears: 3, trainingHoursRequired: 80, performanceRatingRequired: 3 },
  { id: 'g5', level: 5, title: 'Senior Officer', categoryId: 'perm', minSalary: 80000, midSalary: 95000, maxSalary: 110000, currency: 'KSh', effectiveDate: '2024-01-01', minYears: 4, trainingHoursRequired: 100, performanceRatingRequired: 3 },
  { id: 'g6', level: 6, title: 'Principal Officer', categoryId: 'perm', minSalary: 100000, midSalary: 120000, maxSalary: 140000, currency: 'KSh', effectiveDate: '2024-01-01', minYears: 5, trainingHoursRequired: 120, performanceRatingRequired: 3 },
  { id: 'g7', level: 7, title: 'Manager I', categoryId: 'perm', minSalary: 130000, midSalary: 155000, maxSalary: 180000, currency: 'KSh', effectiveDate: '2024-01-01', minYears: 7, trainingHoursRequired: 150, performanceRatingRequired: 4 },
  { id: 'g8', level: 8, title: 'Senior Manager', categoryId: 'perm', minSalary: 170000, midSalary: 200000, maxSalary: 240000, currency: 'KSh', effectiveDate: '2024-01-01', minYears: 9, trainingHoursRequired: 180, performanceRatingRequired: 4 },
  { id: 'g9', level: 9, title: 'Deputy Director', categoryId: 'perm', minSalary: 220000, midSalary: 270000, maxSalary: 320000, currency: 'KSh', effectiveDate: '2024-01-01', minYears: 12, trainingHoursRequired: 200, performanceRatingRequired: 4 },
  { id: 'g10', level: 10, title: 'Director', categoryId: 'perm', minSalary: 280000, midSalary: 340000, maxSalary: 400000, currency: 'KSh', effectiveDate: '2024-01-01', minYears: 14, trainingHoursRequired: 220, performanceRatingRequired: 4 },
  { id: 'g11', level: 11, title: 'Senior Director', categoryId: 'perm', minSalary: 350000, midSalary: 420000, maxSalary: 500000, currency: 'KSh', effectiveDate: '2024-01-01', minYears: 17, trainingHoursRequired: 240, performanceRatingRequired: 5 },
  { id: 'g12', level: 12, title: 'Executive Director', categoryId: 'perm', minSalary: 450000, midSalary: 560000, maxSalary: 680000, currency: 'KSh', effectiveDate: '2024-01-01', minYears: 20, trainingHoursRequired: 260, performanceRatingRequired: 5 },
];

export const initialDeptMappings: DeptGradeMapping[] = [
  { id: 'dm1', department: 'Finance', minGrade: 3, maxGrade: 10, grades: [3,4,5,6,7,8,9,10] },
  { id: 'dm2', department: 'Human Resources', minGrade: 3, maxGrade: 10, grades: [3,4,5,6,7,8,9,10] },
  { id: 'dm3', department: 'Information Technology', minGrade: 3, maxGrade: 11, grades: [3,4,5,6,7,8,9,10,11] },
  { id: 'dm4', department: 'Administration', minGrade: 1, maxGrade: 7, grades: [1,2,3,4,5,6,7] },
  { id: 'dm5', department: 'Legal', minGrade: 5, maxGrade: 12, grades: [5,6,7,8,9,10,11,12] },
  { id: 'dm6', department: 'Operations', minGrade: 2, maxGrade: 9, grades: [2,3,4,5,6,7,8,9] },
  { id: 'dm7', department: 'Marketing', minGrade: 3, maxGrade: 9, grades: [3,4,5,6,7,8,9] },
  { id: 'dm8', department: 'Procurement', minGrade: 3, maxGrade: 8, grades: [3,4,5,6,7,8] },
];

export const initialPositionMappings: PositionGradeMapping[] = [
  { id: 'pm1', position: 'Intern / Attachee', department: 'All Departments', defaultGrade: 1, allowOverride: false },
  { id: 'pm2', position: 'Data Entry Clerk', department: 'Administration', defaultGrade: 2, allowOverride: true },
  { id: 'pm3', position: 'Finance Officer', department: 'Finance', defaultGrade: 4, allowOverride: true },
  { id: 'pm4', position: 'HR Officer', department: 'Human Resources', defaultGrade: 4, allowOverride: true },
  { id: 'pm5', position: 'IT Support Officer', department: 'Information Technology', defaultGrade: 3, allowOverride: true },
  { id: 'pm6', position: 'Senior Finance Officer', department: 'Finance', defaultGrade: 6, allowOverride: true },
  { id: 'pm7', position: 'Senior IT Officer', department: 'Information Technology', defaultGrade: 6, allowOverride: true },
  { id: 'pm8', position: 'Finance Manager', department: 'Finance', defaultGrade: 7, allowOverride: true },
  { id: 'pm9', position: 'HR Manager', department: 'Human Resources', defaultGrade: 7, allowOverride: true },
  { id: 'pm10', position: 'IT Manager', department: 'Information Technology', defaultGrade: 8, allowOverride: true },
  { id: 'pm11', position: 'Legal Officer', department: 'Legal', defaultGrade: 6, allowOverride: true },
  { id: 'pm12', position: 'Senior Legal Officer', department: 'Legal', defaultGrade: 8, allowOverride: true },
  { id: 'pm13', position: 'Operations Manager', department: 'Operations', defaultGrade: 8, allowOverride: true },
  { id: 'pm14', position: 'Director of Finance', department: 'Finance', defaultGrade: 10, allowOverride: false },
  { id: 'pm15', position: 'Director of HR', department: 'Human Resources', defaultGrade: 10, allowOverride: false },
  { id: 'pm16', position: 'Chief Executive Officer', department: 'Executive', defaultGrade: 12, allowOverride: false },
];

export const initialGradeHistory: GradeChangeRecord[] = [
  { id: 'gh1', employeeId: 'EMP-2021-0045', employeeName: 'Alice Wambui Kariuki', department: 'Finance', oldGrade: 4, newGrade: 5, effectiveDate: '2024-01-15', reason: 'promotion', approver: 'James Mutua (HR Director)', approverSignature: true, status: 'approved', notes: 'Exceptional performance in Q3 2023 audit cycle' },
  { id: 'gh2', employeeId: 'EMP-2019-0023', employeeName: 'Brian Ochieng Otieno', department: 'IT', oldGrade: 6, newGrade: 7, effectiveDate: '2024-02-01', reason: 'promotion', approver: 'Jane Njoroge (CEO)', approverSignature: true, status: 'approved', notes: 'Promoted to IT Manager following retirement of predecessor' },
  { id: 'gh3', employeeId: 'EMP-2022-0078', employeeName: 'Carol Akinyi Onyango', department: 'HR', oldGrade: 3, newGrade: 4, effectiveDate: '2024-03-01', reason: 'promotion', approver: 'James Mutua (HR Director)', approverSignature: true, status: 'approved', notes: 'Completion of 2 years + performance rating of 4/5' },
  { id: 'gh4', employeeId: 'EMP-2020-0056', employeeName: 'David Kimani Njoroge', department: 'Legal', oldGrade: 7, newGrade: 6, effectiveDate: '2024-04-01', reason: 'reclassification', approver: 'Jane Njoroge (CEO)', approverSignature: true, status: 'approved', notes: 'Position reclassification following departmental restructuring' },
  { id: 'gh5', employeeId: 'EMP-2023-0091', employeeName: 'Esther Mumbi Wanjiku', department: 'Operations', oldGrade: 2, newGrade: 3, effectiveDate: '2024-05-15', reason: 'promotion', approver: 'James Mutua (HR Director)', approverSignature: false, status: 'pending', notes: 'Pending CEO signature approval' },
  { id: 'gh6', employeeId: 'EMP-2018-0012', employeeName: 'Frank Ngugi Mwangi', department: 'Finance', oldGrade: 5, newGrade: 6, effectiveDate: '2024-06-01', reason: 'promotion', approver: 'James Mutua (HR Director)', approverSignature: true, status: 'approved', notes: '5 years in grade, 120 training hours completed, rating 4.2/5' },
  { id: 'gh7', employeeId: 'EMP-2021-0067', employeeName: 'Grace Wanjiru Kamau', department: 'Marketing', oldGrade: 3, newGrade: 4, effectiveDate: '2024-06-15', reason: 'promotion', approver: 'James Mutua (HR Director)', approverSignature: true, status: 'approved', notes: '' },
  { id: 'gh8', employeeId: 'EMP-2022-0083', employeeName: 'Hassan Abdi Omar', department: 'IT', oldGrade: 4, newGrade: 3, effectiveDate: '2024-07-01', reason: 'demotion', approver: 'Jane Njoroge (CEO)', approverSignature: true, status: 'approved', notes: 'Disciplinary demotion per DC resolution dated 2024-06-20' },
];
