import { Paginated } from './Paginated';

export interface Employee {
  employee_id: string;
  firstname: string;
  lastname: string;
  email?: string;
  position?: string;
  department?: string;
}

export interface PipMilestone {
  id: string;
  performance_improvement_plan_id: string;
  title: string;
  description?: string | null;
  target_date: string;
  status: 'pending' | 'in_progress' | 'completed' | 'missed';
  evidence?: string | null;
  reviewed_by?: string | null;
  reviewed_at?: string | null;
  reviewer_comments?: string | null;
  sort_order: number;
  reviewed_by_employee?: Employee | null;
  created_at?: string | null;
  updated_at?: string | null;
}

export interface PipCheckIn {
  id: string;
  performance_improvement_plan_id: string;
  scheduled_date: string;
  actual_date?: string | null;
  conducted_by?: string | null;
  employee_id?: string | null;
  status: 'scheduled' | 'completed' | 'missed' | 'rescheduled';
  progress_summary?: string | null;
  employee_feedback?: string | null;
  challenges_discussed?: string | null;
  action_items?: string | null;
  next_check_in_date?: string | null;
  conducted_by_employee?: Employee | null;
  employee?: Employee | null;
  performance_improvement_plan?: PerformanceImprovementPlan | null;
  created_at?: string | null;
  updated_at?: string | null;
}

export interface PerformanceImprovementPlan {
  id: string;
  employee_id: string;
  initiated_by: string;
  hr_officer_id?: string | null;
  appraisal_submission_id?: string | null;
  title: string;
  reason: string;
  areas_of_concern: string;
  expected_outcomes: string;
  support_provided?: string | null;
  start_date: string;
  end_date: string;
  check_in_frequency: 'weekly' | 'biweekly' | 'monthly';
  status: 'draft' | 'active' | 'extended' | 'completed_success' | 'completed_failure' | 'canceled';
  outcome_notes?: string | null;
  outcome_recorded_by?: string | null;
  outcome_date?: string | null;
  employee_acknowledged: boolean;
  employee_acknowledged_at?: string | null;
  employee_comments?: string | null;
  employee?: Employee | null;
  initiated_by_employee?: Employee | null;
  hr_officer?: Employee | null;
  outcome_recorded_by_employee?: Employee | null;
  milestones?: PipMilestone[];
  check_ins?: PipCheckIn[];
  created_at?: string | null;
  updated_at?: string | null;
}

export interface PipProgress {
  milestone_completion_percentage: number;
  check_in_completion_percentage: number;
  total_milestones: number;
  completed_milestones: number;
  total_check_ins: number;
  completed_check_ins: number;
  days_remaining: number;
  total_days: number;
}

export interface CreatePipPayload {
  employee_id: string;
  initiated_by: string;
  hr_officer_id?: string;
  appraisal_submission_id?: string;
  title: string;
  reason: string;
  areas_of_concern: string;
  expected_outcomes: string;
  support_provided?: string;
  start_date: string;
  end_date: string;
  check_in_frequency: string;
  milestones?: Array<{
    title: string;
    description?: string;
    target_date: string;
    sort_order?: number;
  }>;
}

export interface UpdatePipPayload {
  title?: string;
  reason?: string;
  areas_of_concern?: string;
  expected_outcomes?: string;
  support_provided?: string;
  start_date?: string;
  end_date?: string;
  check_in_frequency?: string;
}

export interface ExtendPipPayload {
  additional_days: number;
  reason: string;
}

export interface CompletePipPayload {
  outcome: 'completed_success' | 'completed_failure';
  outcome_notes?: string;
}

export interface AcknowledgePipPayload {
  employee_comments?: string;
}

export interface CreatePipMilestonePayload {
  title: string;
  description?: string;
  target_date: string;
  sort_order?: number;
}

export interface ReviewPipMilestonePayload {
  status: 'completed' | 'missed';
  reviewer_comments?: string;
}

export interface CreatePipCheckInPayload {
  scheduled_date: string;
  conducted_by?: string;
  employee_id?: string;
  progress_summary?: string;
  employee_feedback?: string;
  challenges_discussed?: string;
  action_items?: string;
  next_check_in_date?: string;
}

export interface PipResponse {
  data: PerformanceImprovementPlan;
}

export interface PipMilestoneResponse {
  data: PipMilestone;
}

export interface PipCheckInResponse {
  data: PipCheckIn;
}

export interface PipProgressResponse {
  data: PipProgress;
}

export type PaginatedPips = Paginated<PerformanceImprovementPlan>;
export type PaginatedPipMilestones = Paginated<PipMilestone>;
export type PaginatedPipCheckIns = Paginated<PipCheckIn>;
