import api from "./api";
import { HistologyReport } from "../types";


/* CREATE HISTOLOGY REPORT */
export const createHistologyReport = async (data: FormData): Promise<HistologyReport> => {
  const res = await api.post("/histologyreport/create", data, {
    headers: {
      "Content-Type": "multipart/form-data",
    },
  });
  return res.data.data;
}


/* GET ALL HISTOLOGY REPORTS BY PATIENT BY ID */
export const getHistologyReportsByPatientId = async (patientId: string): Promise<HistologyReport[]> => {
  const res = await api.get(`/histologyreport/patient/${patientId}`);
  return res.data.data;
};


/**
 * Update histology report
 * Supports partial update + optional file upload
 */
export const updateHistologyReport = async (
  id: number,
  data: {
    title?: string;
    specimen?: string;
    histological_findings?: string;
    notes?: string;
  },
  file?: File | null
): Promise<HistologyReport> => {
  if (!id) {
    throw new Error("Report ID is required");
  }

  const formData = new FormData();

  // ------------------------
  // Append text fields
  // ------------------------
  if (data.title !== undefined) {
    formData.append("title", data.title);
  }

  if (data.specimen !== undefined) {
    formData.append("specimen", data.specimen);
  }

  if (data.histological_findings !== undefined) {
    formData.append("histological_findings", data.histological_findings);
  }

  if (data.notes !== undefined) {
    formData.append("notes", data.notes);
  }

  // ------------------------
  // Optional PDF file
  // ------------------------
  if (file) {
    formData.append("file", file); // MUST be "file"
  }

  const res = await api.put(`/histologyreport/${id}`, formData, {
    headers: {
      "Content-Type": "multipart/form-data",
    },
  });

  return res.data.data;
};

// Delete histology report
export const deleteHistologyReport = async (
  id: number
): Promise<{ id: number; message: string }> => {
  if (!id) {
    throw new Error("Report ID is required");
  }

  const res = await api.delete(`/histologyreport/${id}`);

  return res.data.data;
};


export const viewHistologyReport = async (
  histologyId: number | string
): Promise<string> => {
  const response = await api.get(`/histologyreport/${histologyId}/view`);

  const url =
    response.data?.data?.url ||
    response.data?.url;

  if (!url) {
    throw new Error("Failed to open report");
  }

  return url;
};

