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

/**
 * Mutation de teste para criar um funcionário e associar ao usuário TI Master
 * Isso permite testar o sistema de férias completo
 */
export const criarFuncionarioParaTIMaster = mutation({
  args: {
    usuarioEmail: v.string(), // Email do usuário TI Master
  },
  returns: v.union(
    v.object({ sucesso: v.literal(true), funcionarioId: v.id("funcionarios") }),
    v.object({ sucesso: v.literal(false), erro: v.string() })
  ),
  handler: async (ctx, args) => {
    // Buscar usuário
    const usuario = await ctx.db
      .query("usuarios")
      .withIndex("by_email", (q) => q.eq("email", args.usuarioEmail))
      .first();

    if (!usuario) {
      return { sucesso: false as const, erro: "Usuário não encontrado" };
    }

    // Verificar se já tem funcionário associado
    if (usuario.funcionarioId) {
      return { sucesso: false as const, erro: "Usuário já tem funcionário associado" };
    }

    // Buscar um símbolo qualquer (pegamos o primeiro)
    const simbolo = await ctx.db.query("simbolos").first();
    
    if (!simbolo) {
      return { sucesso: false as const, erro: "Nenhum símbolo encontrado no sistema" };
    }

    // Criar funcionário de teste
    const funcionarioId = await ctx.db.insert("funcionarios", {
      nome: usuario.nome,
      cpf: "000.000.000-00", // CPF de teste
      rg: "0000000",
      endereco: "Endereço de Teste",
      bairro: "Centro",
      cidade: "Recife",
      uf: "PE",
      telefone: "(81) 99999-9999",
      email: usuario.email,
      matricula: usuario.matricula,
      admissaoData: "2023-01-01", // Data de admissão: 1 ano atrás
      simboloId: simbolo._id,
      simboloTipo: simbolo.tipo,
      statusFerias: "ativo",
      
      // IMPORTANTE: Definir regime de trabalho
      // Altere aqui para testar diferentes regimes:
      // - "clt" = CLT (máx 3 períodos, mín 5 dias)
      // - "estatutario_pe" = Servidor Público PE (máx 2 períodos, mín 10 dias)
      regimeTrabalho: "clt",
      
      // Dados opcionais
      descricaoCargo: "Gestor de TI - Cargo de Teste",
      nomePai: "Pai de Teste",
      nomeMae: "Mãe de Teste",
      naturalidade: "Recife",
      naturalidadeUF: "PE",
      sexo: "masculino",
      estadoCivil: "solteiro",
      nacionalidade: "Brasileira",
      grauInstrucao: "superior_completo",
      tipoSanguineo: "O+",
    });

    // Associar funcionário ao usuário
    await ctx.db.patch(usuario._id, {
      funcionarioId,
    });

    return { sucesso: true as const, funcionarioId };
  },
});

/**
 * Mutation para alterar o regime de trabalho de um funcionário
 * Útil para testar diferentes regras (CLT vs Servidor PE)
 */
export const alterarRegimeTrabalho = mutation({
  args: {
    funcionarioId: v.id("funcionarios"),
    novoRegime: v.union(
      v.literal("clt"),
      v.literal("estatutario_pe"),
      v.literal("estatutario_federal"),
      v.literal("estatutario_municipal")
    ),
  },
  returns: v.object({ sucesso: v.boolean() }),
  handler: async (ctx, args) => {
    await ctx.db.patch(args.funcionarioId, {
      regimeTrabalho: args.novoRegime,
    });

    return { sucesso: true };
  },
});

/**
 * Mutation para alterar data de admissão
 * Útil para testar diferentes períodos aquisitivos
 */
export const alterarDataAdmissao = mutation({
  args: {
    funcionarioId: v.id("funcionarios"),
    novaData: v.string(), // Formato: "YYYY-MM-DD"
  },
  returns: v.object({ sucesso: v.boolean() }),
  handler: async (ctx, args) => {
    await ctx.db.patch(args.funcionarioId, {
      admissaoData: args.novaData,
    });

    return { sucesso: true };
  },
});


