-- Cadastros administráveis: unidades de medida, destinos, responsáveis múltiplos.

-- Unidade de medida
CREATE TABLE "unidade_medida" (
    "id" SERIAL NOT NULL,
    "sigla" TEXT NOT NULL,
    "nome" TEXT NOT NULL,
    "ativo" BOOLEAN NOT NULL DEFAULT true,
    "criado_em" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
    CONSTRAINT "unidade_medida_pkey" PRIMARY KEY ("id")
);
CREATE UNIQUE INDEX "unidade_medida_sigla_key" ON "unidade_medida"("sigla");

-- Destino
CREATE TABLE "destino" (
    "id" SERIAL NOT NULL,
    "nome" TEXT NOT NULL,
    "empresa_id" INTEGER,
    "ativo" BOOLEAN NOT NULL DEFAULT true,
    "criado_em" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
    CONSTRAINT "destino_pkey" PRIMARY KEY ("id")
);
ALTER TABLE "destino" ADD CONSTRAINT "destino_empresa_id_fkey"
    FOREIGN KEY ("empresa_id") REFERENCES "empresa"("id") ON DELETE SET NULL ON UPDATE CASCADE;

-- Responsáveis por centro de custo (principal + corresponsáveis)
CREATE TABLE "centro_custo_responsavel" (
    "id" SERIAL NOT NULL,
    "centro_custo_id" INTEGER NOT NULL,
    "usuario_id" INTEGER NOT NULL,
    "principal" BOOLEAN NOT NULL DEFAULT false,
    CONSTRAINT "centro_custo_responsavel_pkey" PRIMARY KEY ("id")
);
CREATE UNIQUE INDEX "centro_custo_responsavel_centro_custo_id_usuario_id_key"
    ON "centro_custo_responsavel"("centro_custo_id", "usuario_id");
ALTER TABLE "centro_custo_responsavel" ADD CONSTRAINT "ccr_centro_fkey"
    FOREIGN KEY ("centro_custo_id") REFERENCES "centro_custo"("id") ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE "centro_custo_responsavel" ADD CONSTRAINT "ccr_usuario_fkey"
    FOREIGN KEY ("usuario_id") REFERENCES "usuario"("id") ON DELETE RESTRICT ON UPDATE CASCADE;

-- Unidade no item da requisição
ALTER TABLE "requisicao_item" ADD COLUMN "unidade_id" INTEGER;
ALTER TABLE "requisicao_item" ADD CONSTRAINT "requisicao_item_unidade_id_fkey"
    FOREIGN KEY ("unidade_id") REFERENCES "unidade_medida"("id") ON DELETE SET NULL ON UPDATE CASCADE;

-- Destino (cadastro) na requisição
ALTER TABLE "requisicao" ADD COLUMN "destino_id" INTEGER;
ALTER TABLE "requisicao" ADD CONSTRAINT "requisicao_destino_id_fkey"
    FOREIGN KEY ("destino_id") REFERENCES "destino"("id") ON DELETE SET NULL ON UPDATE CASCADE;
