import { Paginated } from './Paginated';

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

export interface CheckInAgendaItem {
  id: string;
  check_in_id: string;
  title: string;
  description?: string | null;
  added_by?: string | null;
  is_completed: boolean;
  sort_order: number;
  added_by_employee?: Employee | null;
  created_at?: string | null;
  updated_at?: string | null;
}

export interface CheckInActionItem {
  id: string;
  check_in_id: string;
  title: string;
  description?: string | null;
  assigned_to?: string | null;
  due_date?: string | null;
  status: 'pending' | 'in_progress' | 'completed';
  completed_at?: string | null;
  sort_order: number;
  assigned_to_employee?: Employee | null;
  check_in?: CheckIn | null;
  created_at?: string | null;
  updated_at?: string | null;
}

export interface CheckIn {
  id: string;
  manager_id: string;
  employee_id: string;
  title: string;
  scheduled_date: string;
  scheduled_time?: string | null;
  duration_minutes?: number | null;
  location?: string | null;
  recurrence?: 'none' | 'weekly' | 'biweekly' | 'monthly' | null;
  recurrence_end_date?: string | null;
  status: 'scheduled' | 'completed' | 'canceled' | 'rescheduled';
  meeting_notes?: string | null;
  private_manager_notes?: string | null;
  completed_at?: string | null;
  mood_rating?: number | null;
  manager?: Employee | null;
  employee?: Employee | null;
  agenda_items?: CheckInAgendaItem[];
  action_items?: CheckInActionItem[];
  created_at?: string | null;
  updated_at?: string | null;
}

export interface CreateCheckInPayload {
  manager_id: string;
  employee_id: string;
  title: string;
  scheduled_date: string;
  scheduled_time?: string;
  duration_minutes?: number;
  location?: string;
  recurrence?: string;
  recurrence_end_date?: string;
}

export interface UpdateCheckInPayload {
  title?: string;
  scheduled_date?: string;
  scheduled_time?: string;
  duration_minutes?: number;
  location?: string;
}

export interface CompleteCheckInPayload {
  meeting_notes?: string;
  private_manager_notes?: string;
  mood_rating?: number;
  action_items?: Array<{
    title: string;
    description?: string;
    assigned_to?: string;
    due_date?: string;
  }>;
}

export interface RescheduleCheckInPayload {
  scheduled_date: string;
}

export interface CreateAgendaItemPayload {
  title: string;
  description?: string;
  added_by?: string;
  sort_order?: number;
}

export interface CreateActionItemPayload {
  title: string;
  description?: string;
  assigned_to?: string;
  due_date?: string;
  sort_order?: number;
}

export interface CheckInResponse {
  data: CheckIn;
}

export interface AgendaItemResponse {
  data: CheckInAgendaItem;
}

export interface ActionItemResponse {
  data: CheckInActionItem;
}

export type PaginatedCheckIns = Paginated<CheckIn>;
