import { apiSlice } from ".";
import URLS from "./constants";

export type TargetType = "Individual" | "WholeTeam";

export interface TargetPeriod {
  month: string;
  year: string;
}

export interface CreateTargetBody {
  targetType: string;
  period: TargetPeriod;
  team: string;
  member?: string;
  salesAmount: number;
  unitsSold: number;
  meetings: number;
  calls: number;
  siteVisits: number;
}

export interface CreateTargetResponse {
  _id: string;
  success: boolean;
  message: string;
}

type Metric = {
  target: number;
  achieved: number;
};

export interface PersonalTargetData {
  salesAmount: Metric;
  unitsSold: Metric;
  meetings: Metric;
  siteVisits: Metric;
  calls: Metric;
}

export interface TeamMemberData extends PersonalTargetData {
  name: string;
}

interface GraphData {
  month: string;
  salesTarget: number;
  salesAchieved: number;
  unitsTarget: number;
  unitsAchieved: number;
}

export interface GetTargetSummaryResponse {
  success: boolean;
  message: string;
  code: number;
  data: {
    personal?: PersonalTargetData;
    team?: PersonalTargetData;
    teamMembers?: TeamMemberData[];
    graphData?: GraphData[];
  };
}

export interface GetTargetSummaryParams {
  month: number | string;
  year: number | string;
  type: "individual" | "team";
  teamId?: string;
  startDate?: string;
  endDate?: string;
}

export const targetApi = apiSlice.injectEndpoints({
  endpoints: (builder) => ({
    createTarget: builder.mutation<CreateTargetResponse, CreateTargetBody>({
      query: (body) => ({
        url: `${URLS.TARGET}`,
        method: "POST",
        body,
      }),
      invalidatesTags: ["Target"],
    }),

    getTargetSummary: builder.query<
      GetTargetSummaryResponse,
      GetTargetSummaryParams
    >({
      query: ({ month, year, type, teamId, startDate, endDate }) => ({
        url: `${URLS.TARGET}`,
        method: "GET",
        params: { month, year, type, teamId, startDate, endDate },
      }),
      providesTags: ["Target"],
    }),
  }),
});

export const { useCreateTargetMutation, useGetTargetSummaryQuery } = targetApi;
