import { v } from "convex/values";
import { mutation } from "./_generated/server";
import { hashPassword } from "./auth/utils";

/**
 * Cria um usuário de teste com funcionário associado
 * para testar o sistema de férias
 */
export const criarUsuarioParaTesteFerias = mutation({
  args: {},
  returns: v.object({
    sucesso: v.boolean(),
    login: v.string(),
    senha: v.string(),
    mensagem: v.string(),
  }),
  handler: async (ctx, args) => {
    const loginTeste = "teste.ferias";
    const senhaTeste = "Teste@2025";
    const emailTeste = "teste.ferias@sgse.pe.gov.br";
    const nomeTeste = "João Silva (Teste)";

    // Verificar se já existe
    const usuarioExistente = await ctx.db
      .query("usuarios")
      .withIndex("by_matricula", (q) => q.eq("matricula", loginTeste))
      .first();

    if (usuarioExistente) {
      return {
        sucesso: true,
        login: loginTeste,
        senha: senhaTeste,
        mensagem: "Usuário de teste já existe! Use as credenciais abaixo.",
      };
    }

    // Buscar role padrão (usuário comum)
    const roleUsuario = await ctx.db
      .query("roles")
      .filter((q) => q.eq(q.field("nome"), "usuario"))
      .first();

    if (!roleUsuario) {
      return {
        sucesso: false,
        login: "",
        senha: "",
        mensagem: "Erro: Role 'usuario' não encontrada",
      };
    }

    // Buscar um símbolo qualquer
    const simbolo = await ctx.db.query("simbolos").first();

    if (!simbolo) {
      return {
        sucesso: false,
        login: "",
        senha: "",
        mensagem: "Erro: Nenhum símbolo encontrado. Crie um símbolo primeiro.",
      };
    }

    // Criar funcionário
    const funcionarioId = await ctx.db.insert("funcionarios", {
      nome: nomeTeste,
      cpf: "111.222.333-44",
      rg: "1234567",
      nascimento: "1990-05-15",
      endereco: "Rua de Teste, 123",
      bairro: "Centro",
      cidade: "Recife",
      uf: "PE",
      cep: "50000-000",
      telefone: "(81) 98765-4321",
      email: emailTeste,
      matricula: loginTeste,
      admissaoData: "2023-01-15", // Admitido em jan/2023 (quase 2 anos)
      simboloId: simbolo._id,
      simboloTipo: simbolo.tipo,
      statusFerias: "ativo",
      regimeTrabalho: "clt", // CLT para testar
      descricaoCargo: "Analista Administrativo",
      nomePai: "José Silva",
      nomeMae: "Maria Silva",
      naturalidade: "Recife",
      naturalidadeUF: "PE",
      sexo: "masculino",
      estadoCivil: "solteiro",
      nacionalidade: "Brasileira",
      grauInstrucao: "superior",
    });

    // Criar usuário
    const senhaHash = await hashPassword(senhaTeste);
    const usuarioId = await ctx.db.insert("usuarios", {
      matricula: loginTeste,
      senhaHash,
      nome: nomeTeste,
      email: emailTeste,
      funcionarioId,
      roleId: roleUsuario._id,
      ativo: true,
      primeiroAcesso: false, // Já consideramos que fez primeiro acesso
      criadoEm: Date.now(),
      atualizadoEm: Date.now(),
    });

    return {
      sucesso: true,
      login: loginTeste,
      senha: senhaTeste,
      mensagem: "Usuário de teste criado com sucesso!",
    };
  },
});

