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

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          ?? "",
  };
}

export function mapTemplatesApiResponse(templates: Template[]): TemplateRow[] {
  return templates.map((t, idx) => mapTemplateToRow(t, idx));
}

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] ?? "—";
}

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":   row.createdAt ? new Date(row.createdAt).toLocaleDateString("en-GB") : "",
    "Updated":   row.updatedAt ? new Date(row.updatedAt).toLocaleDateString("en-GB") : "",
  };
}
