import { RGPDRequest, RGPDSearchFilters, RGPDStats } from "../app/config/rgpd.types";
import { apiFetch } from "../helpers/fetcher";

const BASE_URL = 'rgpd';

const API_URL = `http://localhost:5000/${BASE_URL}`;

export async function getRGPDRequests(filters?: RGPDSearchFilters): Promise<RGPDRequest[]> {
  const params = new URLSearchParams();

  if (filters?.search) {
    params.append("search", filters.search);
  }

  if (filters?.type) {
    params.append("type", filters.type);
  }

  if (filters?.statut) {
    params.append("statut", filters.statut);
  }

  if (filters?.date_debut) {
    params.append("date_debut", filters.date_debut);
  }

  if (filters?.date_fin) {
    params.append("date_fin", filters.date_fin);
  }
  const dataResult = await apiFetch(`${API_URL}?${params.toString()}`);
  return dataResult;
}

export async function getRGPDRequestById(id: number): Promise<RGPDRequest> {
  const dataResult = await apiFetch(`${API_URL}/${id}`);

  return dataResult;
}

export async function createRGPDRequest(payload: Partial<RGPDRequest>): Promise<RGPDRequest> {
  const dataResult = await apiFetch(`${API_URL}/create`, {
    method: "POST",
    body: JSON.stringify(payload)
  });

  return dataResult;
}

export async function updateRGPDRequest(id: number, payload: Partial<RGPDRequest>): Promise<RGPDRequest> {
  const dataResult = await apiFetch(
    `${API_URL}/${id}`,
    {
      method: "PATCH",
      body: JSON.stringify(payload)
    }
  );

  return dataResult;
}

export async function updateRGPDRequestStatus(id: number, payload: string): Promise<RGPDRequest> {
  const dataResult = await apiFetch(
    `${API_URL}/${id}/status`,
    {
      method: "PATCH",
      body: JSON.stringify({ statut: payload })
    }
  );

  return dataResult;
}

export async function deleteRGPDRequest(id: number): Promise<void> {
  const response = await apiFetch(
    `${API_URL}/${id}`,
    {
      method: "DELETE"
    }
  );
}

export async function getRGPDStats(): Promise<RGPDStats> {
  const dataResult = await apiFetch(
    `${API_URL}/stats`
  );
  return dataResult;
}

export async function generateAccessExport(id: number): Promise<Blob> {
  const response = await fetch(
    `${API_URL}/${id}/export-access`
  );

  if (!response.ok) {
    throw new Error(`Erreur génération export`);
  }

  return response.blob();
}

export async function generatePortabilityExport(id: number): Promise<Blob> {
  const response = await fetch(
    `${API_URL}/${id}/export-portability`
  );

  if (!response.ok) {
    throw new Error(`Erreur génération export`);
  }

  return response.blob();
}

export async function launchAnonymisation(usagerId: number) {
  const response = await apiFetch(`${API_URL}/anonymisation/${usagerId}`,
    {
      method: "POST"
    }
  );

  return response;
}

export async function closeRGPDRequest(id: number) {
  const response = await apiFetch(
    `${API_URL}/${id}/close`,
    {
      method: "PATCH"
    }
  );

  return response;
}