// Note: Basic CreateTimesheetDto, UpdateTimesheetDto, TimesheetFilters are defined in timesheets.service.ts
// This file contains extended DTOs for additional functionality

/**
 * Respuesta de timesheet con datos relacionados
 */
export interface TimesheetResponse {
  id: string;
  tenant_id: string;
  company_id: string;
  project_id: string;
  project_name?: string;
  task_id: string | null;
  task_name?: string;
  user_id: string;
  user_name?: string;
  date: Date;
  hours: number;
  description: string | null;
  billable: boolean;
  invoiced: boolean;
  invoice_id: string | null;
  status: 'draft' | 'submitted' | 'approved' | 'rejected';
  approved_by: string | null;
  approved_at: Date | null;
  created_at: Date;
  created_by: string | null;
  updated_at: Date | null;
}

/**
 * Resumen de horas por proyecto
 */
export interface TimesheetSummaryByProject {
  project_id: string;
  project_name: string;
  total_hours: number;
  billable_hours: number;
  non_billable_hours: number;
  invoiced_hours: number;
  pending_hours: number;
}

/**
 * Resumen de horas por usuario
 */
export interface TimesheetSummaryByUser {
  user_id: string;
  user_name: string;
  total_hours: number;
  billable_hours: number;
  approved_hours: number;
  pending_approval: number;
}

/**
 * Resumen de horas por tarea
 */
export interface TimesheetSummaryByTask {
  task_id: string;
  task_name: string;
  project_id: string;
  project_name: string;
  estimated_hours: number;
  spent_hours: number;
  remaining_hours: number;
  progress_percentage: number;
}

/**
 * Resumen general de timesheets
 */
export interface TimesheetSummary {
  total_hours: number;
  billable_hours: number;
  non_billable_hours: number;
  invoiced_hours: number;
  approved_hours: number;
  pending_approval_hours: number;
  by_project?: TimesheetSummaryByProject[];
  by_user?: TimesheetSummaryByUser[];
  by_task?: TimesheetSummaryByTask[];
}
