-- +goose Up
-- +goose StatementBegin

CREATE TABLE IF NOT EXISTS fornecedores (
    id                  UUID        PRIMARY KEY DEFAULT uuid_generate_v4(),
    tenant_id           UUID        NOT NULL REFERENCES tenants(id) ON DELETE CASCADE,
    cnpj_cpf            TEXT        NOT NULL DEFAULT '',
    razao_social        TEXT        NOT NULL,
    nome_fantasia       TEXT        NOT NULL DEFAULT '',
    contato_whatsapp    TEXT        NOT NULL DEFAULT '',
    telefone_fixo       TEXT        NOT NULL DEFAULT '',
    email               TEXT        NOT NULL DEFAULT '',
    responsavel         TEXT        NOT NULL DEFAULT '',
    avaliacao           TEXT        NOT NULL DEFAULT 'bom'
                        CHECK (avaliacao IN ('excelente','bom','regular','ruim')),
    ativo               BOOLEAN     NOT NULL DEFAULT true,
    criado_em           TIMESTAMPTZ NOT NULL DEFAULT now(),
    atualizado_em       TIMESTAMPTZ NOT NULL DEFAULT now(),
    UNIQUE (tenant_id, cnpj_cpf)
);

-- Materiais que esse fornecedor fornece (FK para estoque_categorias tipo=materia_prima)
CREATE TABLE IF NOT EXISTS fornecedor_materiais (
    id              UUID    PRIMARY KEY DEFAULT uuid_generate_v4(),
    tenant_id       UUID    NOT NULL REFERENCES tenants(id) ON DELETE CASCADE,
    fornecedor_id   UUID    NOT NULL REFERENCES fornecedores(id) ON DELETE CASCADE,
    categoria_id    UUID    NOT NULL REFERENCES estoque_categorias(id) ON DELETE CASCADE,
    UNIQUE (tenant_id, fornecedor_id, categoria_id)
);

CREATE INDEX IF NOT EXISTS idx_fornecedores_tenant  ON fornecedores (tenant_id, ativo);
CREATE INDEX IF NOT EXISTS idx_forn_mat_fornecedor  ON fornecedor_materiais (tenant_id, fornecedor_id);

ALTER TABLE fornecedores ENABLE ROW LEVEL SECURITY;
CREATE POLICY tenant_isolation ON fornecedores
    USING (tenant_id = current_setting('app.tenant_id', true)::uuid);

ALTER TABLE fornecedor_materiais ENABLE ROW LEVEL SECURITY;
CREATE POLICY tenant_isolation ON fornecedor_materiais
    USING (tenant_id = current_setting('app.tenant_id', true)::uuid);

CREATE TRIGGER trg_fornecedores_updated BEFORE UPDATE ON fornecedores
    FOR EACH ROW EXECUTE FUNCTION set_updated_at();

-- Trocar o campo TEXT fornecedor em produtos/movimentos por FK (opcional, manter compatibilidade)
ALTER TABLE produtos           ADD COLUMN IF NOT EXISTS fornecedor_id UUID REFERENCES fornecedores(id) ON DELETE SET NULL;
ALTER TABLE movimentos_estoque ADD COLUMN IF NOT EXISTS fornecedor_id UUID REFERENCES fornecedores(id) ON DELETE SET NULL;

-- +goose StatementEnd

-- +goose Down
-- +goose StatementBegin
ALTER TABLE produtos           DROP COLUMN IF EXISTS fornecedor_id;
ALTER TABLE movimentos_estoque DROP COLUMN IF EXISTS fornecedor_id;
DROP TABLE IF EXISTS fornecedor_materiais CASCADE;
DROP TABLE IF EXISTS fornecedores CASCADE;
-- +goose StatementEnd
