import ApiService from "./ApiService";

// Dashboard interfaces matching the API response
export interface DashboardStats {
  active_projects: number;
  approved_leaves_today: number;
  pending_leaves: number;
  clocked_in_users: number;
  not_clocked_in_users: number;
  projects_over_budget: number;
  total_employees: number;
  total_projects: number;
  projects_near_threshold: number;
  total_clients: number;
}

export interface RecentProject {
  project_id: number;
  project_name: string;
  client_name: string;
  total_hours: number;
}

export interface RecentLeave {
  leave_id: number;
  from_date: string;
  to_date: string;
  type: string;
  status: string;
  reason: string;
}

export interface NonClockedInUsers {
  employee_id: number;
  employee_name: string;
}

export interface TodaysTimeTracking {
  id: number;
  project_name: string;
  activity_type: string;
  total_hours: number;
  description: string;
}

export interface DashboardResponse {
  success: boolean;
  data: {
    stats: DashboardStats;
    recent_projects: RecentProject[];
    recent_leaves: RecentLeave[];
    not_clocked_in_employees: NonClockedInUsers[];
    todays_time_tracking: TodaysTimeTracking[];
  };
  message: string;
}

// Project Analytics interfaces
export interface ProjectByEmployees {
  name: string;
  employees: number;
  percentage: number;
}

export interface ProjectByTime {
  name: string;
  hours: number;
  percentage: number;
}

export interface ProjectEmployee {
  name: string;
  cost: number;
  hours: number;
  color?: string;
}

export interface ProjectNearThreshold {
  id: number;
  name: string;
  client: string;
  budgeted: number;
  spent: number;
  percentage: number;
  employees: ProjectEmployee[];
}

export interface ProjectAnalyticsData {
  top_projects_by_employees: ProjectByEmployees[];
  top_projects_by_time: {
    monthly: ProjectByTime[];
    quarterly: ProjectByTime[];
  };
  top_projects_near_threshold: ProjectNearThreshold[];
  year_range?: {
    min_year: number;
    max_year: number;
  };
}

export interface ProjectAnalyticsResponse {
  success: boolean;
  data: ProjectAnalyticsData;
  message: string;
}

// Activity Percentage interfaces
export interface ActivityPercentageData {
  productive_percentage: number;
  non_productive_percentage: number;
}

export interface ActivityPercentageResponse {
  success: boolean;
  code: number;
  message: string;
  data: ActivityPercentageData;
}

// Get Dashboard Data
export async function getDashboardData() {
  return ApiService.request<DashboardResponse>({
    url: "/reports/dashboard",
    method: "get",
  });
}

// Get Project Analytics Data
export async function getProjectAnalytics(filters?: {
  fromMonth?: number;
  fromYear?: number;
  toMonth?: number;
  toYear?: number;
}) {
  const params: any = {};

  if (filters?.fromMonth) {
    params.from_month = filters.fromMonth;
  }

  if (filters?.fromYear) {
    params.from_year = filters.fromYear;
  }

  if (filters?.toMonth) {
    params.to_month = filters.toMonth;
  }

  if (filters?.toYear) {
    params.to_year = filters.toYear;
  }

  return ApiService.request<ProjectAnalyticsResponse>({
    url: "/reports/dashboard/project-analytics",
    method: "get",
    params,
  });
}

// Get Activity Percentage Data
export async function getActivityPercentage(filters?: {
  fromMonth?: number;
  fromYear?: number;
  toMonth?: number;
  toYear?: number;
}) {
  const params: any = {};

  if (filters?.fromMonth) {
    params.from_month = filters.fromMonth;
  }

  if (filters?.fromYear) {
    params.from_year = filters.fromYear;
  }

  if (filters?.toMonth) {
    params.to_month = filters.toMonth;
  }

  if (filters?.toYear) {
    params.to_year = filters.toYear;
  }

  return ApiService.request<ActivityPercentageResponse>({
    url: "/reports/dashboard/activity-percentage",
    method: "get",
    params,
  });
}
