-- +goose Up
-- +goose StatementBegin

-- ─────────────────────────────────────────────────────────────────────────────
-- Permitir folga compensatória como tipo de afastamento (reaproveita toda a
-- lógica já existente de "dia justificado" no espelho e no holerite).
-- ─────────────────────────────────────────────────────────────────────────────
ALTER TABLE afastamentos
    DROP CONSTRAINT IF EXISTS afastamentos_tipo_check;

ALTER TABLE afastamentos
    ADD CONSTRAINT afastamentos_tipo_check
    CHECK (tipo IN (
        'atestado_medico','licenca_maternidade','licenca_paternidade',
        'acidente_trabalho','doenca_profissional','folga_compensatoria','outros'
    ));

-- ─────────────────────────────────────────────────────────────────────────────
-- Vincular débito de banco de horas (tipo folga_compensatoria) ao
-- afastamento criado, para que cancelar um desfaça o outro.
-- ─────────────────────────────────────────────────────────────────────────────
ALTER TABLE banco_horas
    ADD COLUMN IF NOT EXISTS afastamento_id UUID REFERENCES afastamentos(id) ON DELETE SET NULL;

-- ─────────────────────────────────────────────────────────────────────────────
-- Controle de créditos automáticos de banco de horas já processados por mês
-- (idempotência: evita gerar o crédito em duplicidade ao consultar o resumo
-- mais de uma vez para o mesmo mês).
-- ─────────────────────────────────────────────────────────────────────────────
CREATE TABLE IF NOT EXISTS banco_horas_creditos_processados (
    tenant_id       UUID NOT NULL REFERENCES tenants(id) ON DELETE CASCADE,
    funcionario_id  UUID NOT NULL REFERENCES users(id)   ON DELETE CASCADE,
    mes             TEXT NOT NULL, -- 'YYYY-MM'
    banco_horas_id  UUID NOT NULL REFERENCES banco_horas(id) ON DELETE CASCADE,
    minutos         INT  NOT NULL,
    processado_em   TIMESTAMPTZ NOT NULL DEFAULT now(),
    PRIMARY KEY (tenant_id, funcionario_id, mes)
);

-- +goose StatementEnd

-- +goose Down
-- +goose StatementBegin
DROP TABLE IF EXISTS banco_horas_creditos_processados;

ALTER TABLE banco_horas
    DROP COLUMN IF EXISTS afastamento_id;

ALTER TABLE afastamentos
    DROP CONSTRAINT IF EXISTS afastamentos_tipo_check;
ALTER TABLE afastamentos
    ADD CONSTRAINT afastamentos_tipo_check
    CHECK (tipo IN (
        'atestado_medico','licenca_maternidade','licenca_paternidade',
        'acidente_trabalho','doenca_profissional','outros'
    ));
-- +goose StatementEnd
