-- +goose Up
-- +goose StatementBegin

-- ─────────────────────────────────────────────────────────────────────────────
-- Ampliar tipos de lançamento no holerite para incluir adiantamentos
-- ─────────────────────────────────────────────────────────────────────────────
ALTER TABLE holerite_lancamentos
    DROP CONSTRAINT IF EXISTS holerite_lancamentos_tipo_check;

ALTER TABLE holerite_lancamentos
    ADD CONSTRAINT holerite_lancamentos_tipo_check
    CHECK (tipo IN (
        'comissao','produtividade','eficiencia','bonus',
        'outros_proventos','outros_descontos',
        'adiantamento_vt','adiantamento_vr','adiantamento_salario','adiantamento_outros'
    ));

-- ─────────────────────────────────────────────────────────────────────────────
-- Recibos (adiantamentos e pagamentos avulsos)
-- Cada recibo gera automaticamente um lançamento em holerite_lancamentos
-- para que o valor seja descontado na folha do mês correspondente.
-- ─────────────────────────────────────────────────────────────────────────────
CREATE SEQUENCE IF NOT EXISTS recibos_numero_seq;

CREATE TABLE IF NOT EXISTS recibos (
    id              UUID         PRIMARY KEY DEFAULT uuid_generate_v4(),
    tenant_id       UUID         NOT NULL REFERENCES tenants(id) ON DELETE CASCADE,
    numero          INTEGER      NOT NULL DEFAULT nextval('recibos_numero_seq'),
    funcionario_id  UUID         NOT NULL REFERENCES users(id) ON DELETE CASCADE,
    -- Dados exibidos no recibo (podem diferir do cadastro)
    funcionario_nome TEXT        NOT NULL DEFAULT '',
    funcionario_cpf  TEXT        NOT NULL DEFAULT '',
    empresa_nome     TEXT        NOT NULL DEFAULT 'ATM COMERCIO DE UNIFORMES',
    empresa_cnpj     TEXT        NOT NULL DEFAULT '',
    empresa_endereco TEXT        NOT NULL DEFAULT '',
    -- Conteúdo do recibo
    valor            NUMERIC(12,2) NOT NULL DEFAULT 0,
    referente        TEXT         NOT NULL DEFAULT '',  -- ex: "vale transporte"
    tipo             TEXT         NOT NULL
                                  CHECK (tipo IN (
                                      'adiantamento_vt','adiantamento_vr',
                                      'adiantamento_salario','adiantamento_outros'
                                  )),
    observacao       TEXT         NOT NULL DEFAULT '',
    -- Vinculação com folha
    mes              TEXT         NOT NULL, -- 'YYYY-MM' — mês em que será descontado
    lancamento_id    UUID         REFERENCES holerite_lancamentos(id) ON DELETE SET NULL,
    -- Controle
    emitido_por      UUID         REFERENCES users(id) ON DELETE SET NULL,
    emitido_em       TIMESTAMPTZ  NOT NULL DEFAULT now(),
    local_emissao    TEXT         NOT NULL DEFAULT 'Goiânia - GO',
    cancelado        BOOLEAN      NOT NULL DEFAULT false
);

CREATE INDEX IF NOT EXISTS idx_recibos_tenant_func
    ON recibos (tenant_id, funcionario_id, mes);

CREATE INDEX IF NOT EXISTS idx_recibos_numero
    ON recibos (tenant_id, numero);

-- +goose StatementEnd

-- +goose Down
-- +goose StatementBegin
DROP TABLE IF EXISTS recibos;
DROP SEQUENCE IF EXISTS recibos_numero_seq;

ALTER TABLE holerite_lancamentos
    DROP CONSTRAINT IF EXISTS holerite_lancamentos_tipo_check;

ALTER TABLE holerite_lancamentos
    ADD CONSTRAINT holerite_lancamentos_tipo_check
    CHECK (tipo IN (
        'comissao','produtividade','eficiencia','bonus',
        'outros_proventos','outros_descontos'
    ));
-- +goose StatementEnd
