import { EyeIcon, PencilIcon, TrashIcon, ListTodoIcon } from "lucide-react";
import Link from "next/link";
import {
  Table,
  TableBody,
  TableCell,
  TableHead,
  TableHeader,
  TableRow,
} from "@/components/ui/table";
import { Button } from "@/components/ui/button";
import { {{tableObj.pluralPascalCase}}WithRelations } from "@/repositories/{{tableObj.singularKebabCase}}-repository";

export function {{tableObj.singularPascalCase}}Table({ {{tableObj.singularCamelCase}}List }: { {{tableObj.singularCamelCase}}List: {{tableObj.pluralPascalCase}}WithRelations }) {
  return (
    <Table>
      <TableHeader>
        <TableRow>
          <TableHead>Id</TableHead>
          {{#each validatedColumns}}
          <TableHead>{{this.caseVariants.originalCapitalCase}}</TableHead>
          {{/each}}
          <TableHead></TableHead>
        </TableRow>
      </TableHeader>
      <TableBody>
        { {{tableObj.singularCamelCase}}List.map(({{tableObj.singularCamelCase}}) => (
          <TableRow key={ {{tableObj.singularCamelCase}}.id }>
            <TableCell>{ {{tableObj.singularCamelCase}}.id }</TableCell>
            {{#each validatedColumns}}
              {{#switch this.dataType}}
                {{#case "boolean"}}
            <TableCell>{ {{../tableObj.singularCamelCase}}.{{this.caseVariants.originalCamelCase}} ? "true" : "false" }</TableCell>
                {{/case}}
                {{#case "date"}}
            <TableCell>{ {{../tableObj.singularCamelCase}}.{{this.caseVariants.originalCamelCase}}?.toLocaleDateString() }</TableCell>
                {{/case}}
                {{#case "datetime"}}
            <TableCell>{ {{../tableObj.singularCamelCase}}.{{this.caseVariants.originalCamelCase}}?.toLocaleString() }</TableCell>
                {{/case}}
                {{#case "timestamp"}}
            <TableCell>{ {{../tableObj.singularCamelCase}}.{{this.caseVariants.originalCamelCase}}?.toLocaleString() }</TableCell>
                {{/case}}
                {{#case "json"}}
            <TableCell>{ JSON.stringify({{../tableObj.singularCamelCase}}.{{this.caseVariants.originalCamelCase}}) }</TableCell>
                {{/case}}
                {{#case "jsonb"}}
            <TableCell>{ JSON.stringify({{../tableObj.singularCamelCase}}.{{this.caseVariants.originalCamelCase}}) }</TableCell>
                {{/case}}
                {{#case "references"}}
            <TableCell>{ {{../tableObj.singularCamelCase}}.{{this.caseVariantsWithId.singularCamelCase}} }</TableCell>
                {{/case}}
                {{#case "references_select"}}
            <TableCell>{ {{../tableObj.singularCamelCase}}.{{this.caseVariantsWithId.singularCamelCase}} }</TableCell>
                {{/case}}
                {{#case "references_combobox"}}
            <TableCell>{ {{../tableObj.singularCamelCase}}.{{this.caseVariantsWithId.singularCamelCase}} }</TableCell>
                {{/case}}
                {{#case "file"}}
            <TableCell>{ {{../tableObj.singularCamelCase}}.{{this.caseVariants.originalCamelCase}} }</TableCell>
                {{/case}}
                {{#default}}
            <TableCell>{ {{../tableObj.singularCamelCase}}.{{this.caseVariants.originalCamelCase}} }</TableCell>
                {{/default}}
              {{/switch}}
            {{/each}}
            <TableCell className="justify-end flex gap-2">
              {/* [CODE_MARK table-actions] */}
              <Link href={`{{#if isAdmin}}/admin{{/if}}/{{tableObj.pluralKebabCase}}/${ {{tableObj.singularCamelCase}}.id }`}>
                <Button size="icon" variant="outline">
                  <EyeIcon />
                </Button>
              </Link>
              <Link href={`{{#if isAdmin}}/admin{{/if}}/{{tableObj.pluralKebabCase}}/${ {{tableObj.singularCamelCase}}.id }/edit`}>
                <Button size="icon" variant="outline">
                  <PencilIcon />
                </Button>
              </Link>
              <Link href={`{{#if isAdmin}}/admin{{/if}}/{{tableObj.pluralKebabCase}}/${ {{tableObj.singularCamelCase}}.id }/delete`}>
                <Button size="icon" variant="outline">
                  <TrashIcon />
                </Button>
              </Link>
            </TableCell>
          </TableRow>
        ))}
      </TableBody>
    </Table>
  );
}
