import { defineTable } from 'convex/server';
import { v } from 'convex/values';

export const feriasTables = {
	ferias: defineTable({
		funcionarioId: v.id('funcionarios'),
		anoReferencia: v.number(),
		dataInicio: v.string(),
		dataFim: v.string(),
		diasFerias: v.number(),
		status: v.union(
			v.literal('aguardando_aprovacao'),
			v.literal('aprovado'),
			v.literal('reprovado'),
			v.literal('data_ajustada_aprovada'),
			v.literal('EmFérias'),
			v.literal('Cancelado_RH')
		),
		gestorId: v.optional(v.id('usuarios')),
		observacao: v.optional(v.string()),
		motivoReprovacao: v.optional(v.string()),
		dataAprovacao: v.optional(v.number()),
		dataReprovacao: v.optional(v.number()),
		diasAbono: v.number(),
		historicoAlteracoes: v.optional(
			v.array(
				v.object({
					data: v.number(),
					usuarioId: v.id('usuarios'),
					acao: v.string()
				})
			)
		)
	})
		.index('by_funcionario', ['funcionarioId'])
		.index('by_funcionario_and_ano', ['funcionarioId', 'anoReferencia'])
		.index('by_funcionario_and_status', ['funcionarioId', 'status'])
		.index('by_status', ['status'])
		.index('by_ano', ['anoReferencia']),

	notificacoesFerias: defineTable({
		destinatarioId: v.id('usuarios'),
		feriasId: v.id('ferias'),
		tipo: v.union(
			v.literal('nova_solicitacao'),
			v.literal('aprovado'),
			v.literal('reprovado'),
			v.literal('data_ajustada')
		),
		lida: v.boolean(),
		mensagem: v.string()
	})
		.index('by_destinatario', ['destinatarioId'])
		.index('by_destinatario_and_lida', ['destinatarioId', 'lida'])
};
