import { buildMondayItemName, type CreateDossierInput } from "./contracts";

export type MondayConfiguration = {
  apiToken: string;
  boardId: string;
  inProgressGroupId: string;
  completedGroupId: string;
  cancelledGroupId: string;
};

export const CREATE_ITEM_MUTATION = `
  mutation CreateDossierItem($boardId: ID!, $groupId: String!, $itemName: String!, $columnValues: JSON!) {
    create_item(board_id: $boardId, group_id: $groupId, item_name: $itemName, column_values: $columnValues) {
      id
      url
    }
  }
`;

export const CREATE_UPDATE_MUTATION = `
  mutation CreateDossierUpdate($itemId: ID!, $body: String!) {
    create_update(item_id: $itemId, body: $body) {
      id
    }
  }
`;

export function buildMondayColumnValues(input: CreateDossierInput, links: { driveUrl: string; portalUrl: string }) {
  return {
    ref_dossier: input.reference,
    type_daact: { label: input.daactCode },
    statut_dossier: { label: "Nouveau" },
    type_projet: { label: input.projectType },
    precision_projet: { text: input.projectDetail },
    surface_creee: input.createdSurface,
    email_client: { email: input.email, text: input.email },
    lien_portail: { url: links.portalUrl, text: "Ouvrir le portail" },
    dossier_drive: { url: links.driveUrl, text: "Ouvrir Drive" },
    completude: 0,
    pieces_recues: 0,
    pieces_attendues: 0,
    numero_devis: input.quoteNumber ?? "",
    statut_devis: input.quoteStatus ? { label: input.quoteStatus } : null,
    numero_acompte: input.depositInvoiceNumber ?? "",
    statut_acompte: input.depositInvoiceStatus ? { label: input.depositInvoiceStatus } : null,
    numero_solde: input.balanceInvoiceNumber ?? "",
    statut_solde: input.balanceInvoiceStatus ? { label: input.balanceInvoiceStatus } : null,
    objet_relance: input.reminderObject ? { labels: [input.reminderObject] } : null,
    date_relance: input.reminderDate ? { date: input.reminderDate } : null,
  };
}

export function buildMondayCreateVariables(input: CreateDossierInput, groupId: string, boardId: string, links: { driveUrl: string; portalUrl: string }) {
  return {
    boardId,
    groupId,
    itemName: buildMondayItemName(input),
    columnValues: JSON.stringify(buildMondayColumnValues(input, links)),
  };
}

export function buildCreationUpdate(input: CreateDossierInput, driveFolderName: string) {
  return [
    `<b>Dossier créé depuis le portail ENRGETIC</b>`,
    `Référence : ${input.reference}`,
    `Mission : DAACT ${input.daactCode}`,
    `Projet : ${input.projectType} · ${input.createdSurface} m² · ${input.city}`,
    `Dossier Drive : ${driveFolderName}`,
    `Checklist ENRGETIC appliquée. Le lien nominatif client est actif.`,
  ].join("<br>");
}
