import apiGlobal from '@/services/apiGlobal';

export interface DailySignupData {
  date: string;
  count: number;
  formattedDate: string;
}

export interface DailySignupsSummary {
  totalSignups: number;
  averagePerDay: number;
  period: string;
}

export interface DailySignupsResponse {
  data: {
    dailyData: DailySignupData[];
    summary: DailySignupsSummary;
  };
  message: string;
  statusCode: number;
}

export interface FormCompletionOverview {
  totalUsers: number;
  profileCompletedUsers: number;
  volunteerFormUsers: number;
  profileCompletionRate: number;
  volunteerFormRate: number;
}

export interface VolunteerFormStatus {
  accepted: { count: number; percentage: number };
  rejected: { count: number; percentage: number };
  pending: { count: number; percentage: number };
}

export interface ChartData {
  labels: string[];
  data: number[];
  percentages: number[];
}

export interface FormCompletionStatsResponse {
  data: {
    overview: FormCompletionOverview;
    volunteerFormStatus: VolunteerFormStatus;
    chartData: ChartData;
  };
  message: string;
  statusCode: number;
}

export interface DailyLogin {
  date: string;
  logins: number;
  formattedDate: string;
}

export interface FrequencyBreakdown {
  _id: string;
  count: number;
  averageLogins: number;
}

export interface LoginFrequencySummary {
  totalLogins: number;
  totalActiveUsers: number;
  averageLoginsPerDay: number;
  period: string;
}

export interface LoginFrequencyChartData {
  daily: {
    labels: string[];
    data: number[];
  };
  frequency: {
    labels: string[];
    data: number[];
  };
}

export interface LoginFrequencyResponse {
  data: {
    dailyLogins: DailyLogin[];
    frequencyBreakdown: FrequencyBreakdown[];
    summary: LoginFrequencySummary;
    chartData: LoginFrequencyChartData;
  };
  message: string;
  statusCode: number;
}

export const fetchDailySignups = async (): Promise<DailySignupsResponse> => {
  const response = await apiGlobal.get('/fetchDailySignups');
  return response.data;
};

export const fetchFormCompletionStats = async (): Promise<FormCompletionStatsResponse> => {
  const response = await apiGlobal.get('/fetchFormCompletionStats');
  return response.data;
};

export const fetchLoginFrequency = async (): Promise<LoginFrequencyResponse> => {
  const response = await apiGlobal.get('/fetchLoginFrequency');
  return response.data;
};
