import type { Template, TemplateRow } from "@/lib/api/types/template.types";

// ─────────────────────────────────────────────────────────────────────────────
// mapTemplateToRow
// Raw API Template → TemplateRow (table shape)
// ─────────────────────────────────────────────────────────────────────────────
export function mapTemplateToRow(template: Template, index: number): TemplateRow {
  return {
    sno:          index + 1,
    id:           template.id,
    name:         template.name         ?? "—",
    stageName:    template.stageName,
    templateType: template.templateType,
    version:      template.version      ?? "—",
    filePath:     template.filePath     ?? "—",
    isActive:     template.isActive,
    createdBy:    template.createdBy,
    createdAt:    template.createdAt,
    updatedAt:    template.updatedAt,
    url:          template.url          ?? "",
  };
}

// ─────────────────────────────────────────────────────────────────────────────
// mapTemplatesApiResponse
// Maps full array from API → TemplateRow[]
// ─────────────────────────────────────────────────────────────────────────────
export function mapTemplatesApiResponse(templates: Template[]): TemplateRow[] {
  return templates.map((t, idx) => mapTemplateToRow(t, idx));
}

// ─────────────────────────────────────────────────────────────────────────────
// mapColumnKeyToValue
// Column key → display value for a given row.
// Used by DynamicTemplateRow
// ─────────────────────────────────────────────────────────────────────────────
export function mapColumnKeyToValue(key: string, row: TemplateRow): any {
  const columnMap: Record<string, any> = {
    name:         row.name,
    stageName:    row.stageName,
    templateType: row.templateType,
    version:      row.version,
    filePath:     row.filePath,
    isActive:     row.isActive,
    createdBy:    row.createdBy ?? "—",
    createdAt: row.createdAt
      ? new Date(row.createdAt)
          .toLocaleDateString("en-GB", { day: "2-digit", month: "short", year: "numeric" })
          .replace(/ /g, "-")
      : "—",
    updatedAt: row.updatedAt
      ? new Date(row.updatedAt)
          .toLocaleDateString("en-GB", { day: "2-digit", month: "short", year: "numeric" })
          .replace(/ /g, "-")
      : "—",
  };

  return columnMap[key] ?? row[key] ?? "—";
}

// ─────────────────────────────────────────────────────────────────────────────
// formatTemplateForExport
// Flat object for Excel/CSV export
// ─────────────────────────────────────────────────────────────────────────────
export function formatTemplateForExport(
  row: TemplateRow
): Record<string, string | number> {
  return {
    "No.":          row.sno,
    "ID":           row.id,
    "Name":         row.name,
    "Stage":        row.stageName,
    "Type":         row.templateType,
    "Version":      row.version,
    "File Path":    row.filePath,
    "Active":       row.isActive ? "Yes" : "No",
    "Created At":   row.createdAt
      ? new Date(row.createdAt).toLocaleDateString("en-GB")
      : "",
    "Updated At":   row.updatedAt
      ? new Date(row.updatedAt).toLocaleDateString("en-GB")
      : "",
  };
}
