-- Novo fluxo de requisição (solicitação -> cotação -> aprovação).

-- 1) Novo enum de status (PENDENTE -> AGUARDANDO_APROVACAO).
CREATE TYPE "StatusRequisicao_new" AS ENUM ('RASCUNHO','SOLICITADA','EM_COTACAO','AGUARDANDO_APROVACAO','APROVADA','REJEITADA','COMPRADA');
ALTER TABLE "requisicao" ALTER COLUMN "status" DROP DEFAULT;
ALTER TABLE "requisicao" ALTER COLUMN "status" TYPE "StatusRequisicao_new" USING (
  CASE "status"::text WHEN 'PENDENTE' THEN 'AGUARDANDO_APROVACAO' ELSE "status"::text END::"StatusRequisicao_new"
);
ALTER TYPE "StatusRequisicao" RENAME TO "StatusRequisicao_old";
ALTER TYPE "StatusRequisicao_new" RENAME TO "StatusRequisicao";
DROP TYPE "StatusRequisicao_old";
ALTER TABLE "requisicao" ALTER COLUMN "status" SET DEFAULT 'RASCUNHO';

-- 2) Requisição: descrição/valor passam a ser opcionais; novos campos.
ALTER TABLE "requisicao" ALTER COLUMN "descricao_peca" DROP NOT NULL;
ALTER TABLE "requisicao" ALTER COLUMN "preco_solicitado" DROP NOT NULL;
ALTER TABLE "requisicao" ADD COLUMN "destino" TEXT;
ALTER TABLE "requisicao" ADD COLUMN "prazo_limite" TIMESTAMP(3);
ALTER TABLE "requisicao" ADD COLUMN "valor_total_cotado" DECIMAL(14,2);
ALTER TABLE "requisicao" ADD COLUMN "condicao_cotacao" TEXT;
ALTER TABLE "requisicao" ADD COLUMN "info_comerciais" TEXT;

-- 3) Itens da requisição.
CREATE TABLE "requisicao_item" (
    "id" SERIAL NOT NULL,
    "requisicao_id" INTEGER NOT NULL,
    "descricao" TEXT NOT NULL,
    "quantidade" DECIMAL(14,3) NOT NULL DEFAULT 1,
    "anexo" TEXT,
    "valor_unitario" DECIMAL(14,2),
    "ordem" INTEGER NOT NULL DEFAULT 0,
    "criado_em" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
    CONSTRAINT "requisicao_item_pkey" PRIMARY KEY ("id")
);
CREATE INDEX "requisicao_item_requisicao_id_idx" ON "requisicao_item"("requisicao_id");
ALTER TABLE "requisicao_item" ADD CONSTRAINT "requisicao_item_requisicao_id_fkey"
    FOREIGN KEY ("requisicao_id") REFERENCES "requisicao"("id") ON DELETE CASCADE ON UPDATE CASCADE;

-- 4) Responsável padrão por centro de custo (solicitante sugerido).
ALTER TABLE "centro_custo" ADD COLUMN "responsavel_padrao_id" INTEGER;
ALTER TABLE "centro_custo" ADD CONSTRAINT "centro_custo_responsavel_padrao_id_fkey"
    FOREIGN KEY ("responsavel_padrao_id") REFERENCES "usuario"("id") ON DELETE SET NULL ON UPDATE CASCADE;
