"use server";

import type { Id } from "./_generated/dataModel";

export type TicketFormFieldSeed = {
  key: string;
  label: string;
  type: "text" | "number" | "date" | "select" | "boolean";
  required?: boolean;
  description?: string;
  options?: Array<{ value: string; label: string }>;
  companyId?: Id<"companies"> | null;
};

export const TICKET_FORM_CONFIG = [
  {
    key: "admissao" as const,
    label: "Admissão de colaborador",
    description: "Coleta dados completos para novos colaboradores, incluindo informações pessoais e provisionamento de acesso.",
    defaultEnabled: true,
  },
  {
    key: "desligamento" as const,
    label: "Desligamento de colaborador",
    description: "Checklist de desligamento com orientações para revogar acessos e coletar equipamentos.",
    defaultEnabled: true,
  },
];

export const OPTIONAL_ADMISSION_FIELD_KEYS = [
  "colaborador_observacoes",
  "colaborador_permissoes_pasta",
  "colaborador_equipamento",
  "colaborador_grupos_email",
  "colaborador_cpf",
  "colaborador_rg",
  "colaborador_patrimonio",
];

export const TICKET_FORM_DEFAULT_FIELDS: Record<string, TicketFormFieldSeed[]> = {
  admissao: [
    { key: "solicitante_nome", label: "Nome do solicitante", type: "text", required: true, description: "Quem está solicitando a admissão." },
    { key: "solicitante_telefone", label: "Telefone do solicitante", type: "text", required: true },
    { key: "solicitante_ramal", label: "Ramal", type: "text" },
    {
      key: "solicitante_email",
      label: "E-mail do solicitante",
      type: "text",
      required: true,
      description: "Informe um e-mail válido para retornarmos atualizações.",
    },
    { key: "colaborador_nome", label: "Nome do colaborador", type: "text", required: true },
    { key: "colaborador_email_desejado", label: "E-mail do colaborador", type: "text", required: true, description: "Endereço de e-mail que deverá ser criado." },
    { key: "colaborador_data_nascimento", label: "Data de nascimento", type: "date", required: true },
    { key: "colaborador_rg", label: "RG", type: "text", required: false },
    { key: "colaborador_cpf", label: "CPF", type: "text", required: false },
    { key: "colaborador_data_inicio", label: "Data de início", type: "date", required: true },
    { key: "colaborador_departamento", label: "Departamento", type: "text", required: true },
    {
      key: "colaborador_nova_contratacao",
      label: "O colaborador é uma nova contratação?",
      type: "select",
      required: true,
      description: "Informe se é uma nova contratação ou substituição.",
      options: [
        { value: "nova", label: "Sim, nova contratação" },
        { value: "substituicao", label: "Não, irá substituir alguém" },
      ],
    },
    {
      key: "colaborador_substituicao",
      label: "Quem será substituído?",
      type: "text",
      description: "Preencha somente se for uma substituição.",
    },
    {
      key: "colaborador_grupos_email",
      label: "Grupos de e-mail necessários",
      type: "text",
      required: false,
      description: "Liste os grupos ou escreva 'Não se aplica'.",
    },
    {
      key: "colaborador_equipamento",
      label: "Equipamento disponível",
      type: "text",
      required: false,
      description: "Informe se já existe equipamento ou qual deverá ser disponibilizado.",
    },
    {
      key: "colaborador_permissoes_pasta",
      label: "Permissões de pastas",
      type: "text",
      required: false,
      description: "Indique quais pastas ou qual colaborador servirá de referência.",
    },
    {
      key: "colaborador_observacoes",
      label: "Observações adicionais",
      type: "text",
      required: false,
    },
    {
      key: "colaborador_patrimonio",
      label: "Patrimônio do computador (se houver)",
      type: "text",
      required: false,
    },
  ],
  desligamento: [
    { key: "contato_nome", label: "Contato responsável", type: "text", required: true },
    { key: "contato_email", label: "E-mail do contato", type: "text", required: true },
    { key: "contato_telefone", label: "Telefone do contato", type: "text" },
    { key: "colaborador_nome", label: "Nome do colaborador", type: "text", required: true },
    { key: "colaborador_departamento", label: "Departamento do colaborador", type: "text", required: true },
    {
      key: "colaborador_email",
      label: "E-mail do colaborador",
      type: "text",
      required: true,
      description: "Informe o e-mail que deve ser desativado.",
    },
    {
      key: "colaborador_patrimonio",
      label: "Patrimônio do computador",
      type: "text",
      description: "Informe o patrimônio se houver equipamento vinculado.",
    },
  ],
};
