"use client"

import { type Table } from "@tanstack/react-table"
import ExcelJS from "exceljs"
import { VendorCandidates } from "@/db/schema/vendors"

/**
 * Export an empty template for vendor candidates with column headers
 * matching the expected import format
 */
export async function exportVendorCandidateTemplate() {
  // Create a new workbook and worksheet
  const workbook = new ExcelJS.Workbook()
  const worksheet = workbook.addWorksheet("Vendor Candidates")
  
  // Define the columns with expected headers
  const columns = [
    { header: "Company Name", key: "companyName", width: 30 },
    { header: "Tax ID", key: "taxId", width: 20 },
    { header: "Contact Email", key: "contactEmail", width: 30 },
    { header: "Contact Phone", key: "contactPhone", width: 20 },
    { header: "Address", key: "address", width: 40 },
    { header: "Country", key: "country", width: 20 },
    { header: "Source", key: "source", width: 20 },
    { header: "Items", key: "items", width: 40 },
    { header: "Remark", key: "remark", width: 40 },
    { header: "Status", key: "status", width: 15 },
  ]
  
  // Add columns to the worksheet
  worksheet.columns = columns
  
  // Style the header row
  const headerRow = worksheet.getRow(2)
  headerRow.font = { bold: true }
  headerRow.alignment = { horizontal: "center" }
  headerRow.eachCell((cell) => {
    cell.fill = {
      type: "pattern",
      pattern: "solid",
      fgColor: { argb: "FFCCCCCC" },
    }
    
    // Mark required fields with a red asterisk
    const requiredFields = ["Company Name", "Source", "Items"]
    if (requiredFields.includes(cell.value as string)) {
      cell.value = `${cell.value} *`
      cell.font = { bold: true, color: { argb: "FFFF0000" } }
    }
  })
  
  // Add example data rows
  const exampleData = [
    {
      companyName: "ABC Corporation",
      taxId: "123-45-6789",
      contactEmail: "contact@abc.com",
      contactPhone: "+1-123-456-7890",
      address: "123 Business Ave, Suite 100, New York, NY 10001",
      country: "US",
      source: "Website",
      items: "Electronic components, Circuit boards, Sensors",
      remark: "Potential supplier for Project X",
      status: "COLLECTED",
    },
    {
      companyName: "XYZ Ltd.",
      taxId: "GB987654321",
      contactEmail: "info@xyz.com",
      contactPhone: "+44-987-654-3210",
      address: "45 Industrial Park, London, EC2A 4PX",
      country: "GB",
      source: "Referral",
      items: "Steel components, Metal frames, Industrial hardware",
      remark: "Met at trade show in March",
      status: "COLLECTED",
    },
  ]
  
  // Add the example rows to the worksheet
  exampleData.forEach((data) => {
    worksheet.addRow(data)
  })
  
  // Add data validation for Status column
  const statusValues = ["COLLECTED", "INVITED", "DISCARDED"]
  const statusColumn = columns.findIndex(col => col.key === "status") + 1
  const statusColLetter = String.fromCharCode(64 + statusColumn)
  
  for (let i = 4; i <= 100; i++) { // Apply to rows 4-100 (after example data)
    worksheet.getCell(`${statusColLetter}${i}`).dataValidation = {
      type: 'list',
      allowBlank: true,
      formulae: [`"${statusValues.join(',')}"`]
    }
  }
  
  // Add instructions row
  worksheet.insertRow(1, ["Please fill in the data below. Required fields are marked with an asterisk (*): Company Name, Source, Items"])
  worksheet.mergeCells(`A1:${String.fromCharCode(64 + columns.length)}1`)
  const instructionRow = worksheet.getRow(1)
  instructionRow.font = { bold: true, color: { argb: "FF0000FF" } }
  instructionRow.alignment = { horizontal: "center" }
  instructionRow.height = 30
  
  // Auto-width columns based on content
  worksheet.columns.forEach(column => {
    if (column.key) { // Check that column.key is defined
      const dataMax = Math.max(...worksheet.getColumn(column.key).values
        .filter(value => value !== null && value !== undefined)
        .map(value => String(value).length)
      )
      column.width = Math.max(column.width || 10, dataMax + 2)
    }
  })
  
  // Download the workbook
  const buffer = await workbook.xlsx.writeBuffer()
  const blob = new Blob([buffer], {
    type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
  })
  const url = URL.createObjectURL(blob)
  const link = document.createElement("a")
  link.href = url
  link.download = "vendor-candidates-template.xlsx"
  link.click()
  URL.revokeObjectURL(url)
}