-- Cadastro de peças/itens (dados mestres — Módulo 2A). Não controla saldo.
CREATE TYPE "TipoPeca" AS ENUM ('PECA', 'INSUMO', 'FERRAMENTA');

CREATE TABLE "peca" (
  "id"            SERIAL NOT NULL,
  "codigo"        TEXT NOT NULL,
  "codigo_interno" BOOLEAN NOT NULL DEFAULT true,
  "marca"         TEXT,
  "produto"       TEXT NOT NULL,
  "referencia"    TEXT,
  "categoria_id"  INTEGER,
  "unidade_id"    INTEGER,
  "tipo"          "TipoPeca" NOT NULL DEFAULT 'PECA',
  "ativo"         BOOLEAN NOT NULL DEFAULT true,
  "criado_em"     TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
  "atualizado_em" TIMESTAMP(3) NOT NULL,
  CONSTRAINT "peca_pkey" PRIMARY KEY ("id")
);

CREATE UNIQUE INDEX "peca_codigo_key" ON "peca"("codigo");
CREATE INDEX "peca_marca_idx" ON "peca"("marca");
CREATE INDEX "peca_produto_idx" ON "peca"("produto");
CREATE INDEX "peca_referencia_idx" ON "peca"("referencia");

ALTER TABLE "peca"
  ADD CONSTRAINT "peca_categoria_id_fkey" FOREIGN KEY ("categoria_id") REFERENCES "categoria"("id") ON DELETE SET NULL ON UPDATE CASCADE,
  ADD CONSTRAINT "peca_unidade_id_fkey" FOREIGN KEY ("unidade_id") REFERENCES "unidade_medida"("id") ON DELETE SET NULL ON UPDATE CASCADE;

-- Ligação da peça ao item da requisição (seleção do catálogo / texto livre).
ALTER TABLE "requisicao_item"
  ADD COLUMN "peca_id" INTEGER,
  ADD COLUMN "nao_cadastrada" BOOLEAN NOT NULL DEFAULT false;

ALTER TABLE "requisicao_item"
  ADD CONSTRAINT "requisicao_item_peca_id_fkey" FOREIGN KEY ("peca_id") REFERENCES "peca"("id") ON DELETE SET NULL ON UPDATE CASCADE;
