-- CreateEnum
CREATE TYPE "InstrumentVersionStatus" AS ENUM ('DRAFT', 'ACTIVE', 'ARCHIVED');

-- CreateEnum
CREATE TYPE "PillarKey" AS ENUM ('THERMOMETER', 'COMMUNICATIONAL', 'REPUTATIONAL', 'ORGANIZATIONAL', 'EMOTIONAL_MENTAL');

-- AlterEnum
ALTER TYPE "InvitationStatus" ADD VALUE 'IN_PROGRESS';

-- AlterTable
ALTER TABLE "Diagnostic" ADD COLUMN     "instrumentVersionId" TEXT;

-- AlterTable
ALTER TABLE "Response" ADD COLUMN     "pulseScore" INTEGER;

-- CreateTable
CREATE TABLE "InstrumentVersion" (
    "id" TEXT NOT NULL,
    "version" INTEGER NOT NULL,
    "status" "InstrumentVersionStatus" NOT NULL DEFAULT 'DRAFT',
    "publishedAt" TIMESTAMP(3),
    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
    "updatedAt" TIMESTAMP(3) NOT NULL,

    CONSTRAINT "InstrumentVersion_pkey" PRIMARY KEY ("id")
);

-- CreateTable
CREATE TABLE "InstrumentPillar" (
    "id" TEXT NOT NULL,
    "versionId" TEXT NOT NULL,
    "key" "PillarKey" NOT NULL,
    "order" INTEGER NOT NULL,

    CONSTRAINT "InstrumentPillar_pkey" PRIMARY KEY ("id")
);

-- CreateTable
CREATE TABLE "InstrumentItem" (
    "id" TEXT NOT NULL,
    "pillarId" TEXT NOT NULL,
    "order" INTEGER NOT NULL,
    "text" TEXT NOT NULL,
    "scaleLabels" JSONB NOT NULL,
    "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
    "updatedAt" TIMESTAMP(3) NOT NULL,

    CONSTRAINT "InstrumentItem_pkey" PRIMARY KEY ("id")
);

-- CreateTable
CREATE TABLE "InstrumentOpenQuestion" (
    "id" TEXT NOT NULL,
    "versionId" TEXT NOT NULL,
    "order" INTEGER NOT NULL,
    "text" TEXT NOT NULL,

    CONSTRAINT "InstrumentOpenQuestion_pkey" PRIMARY KEY ("id")
);

-- CreateIndex
CREATE UNIQUE INDEX "InstrumentVersion_version_key" ON "InstrumentVersion"("version");

-- CreateIndex
CREATE UNIQUE INDEX "InstrumentPillar_versionId_key_key" ON "InstrumentPillar"("versionId", "key");

-- AddForeignKey
ALTER TABLE "Diagnostic" ADD CONSTRAINT "Diagnostic_instrumentVersionId_fkey" FOREIGN KEY ("instrumentVersionId") REFERENCES "InstrumentVersion"("id") ON DELETE SET NULL ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "InstrumentPillar" ADD CONSTRAINT "InstrumentPillar_versionId_fkey" FOREIGN KEY ("versionId") REFERENCES "InstrumentVersion"("id") ON DELETE RESTRICT ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "InstrumentItem" ADD CONSTRAINT "InstrumentItem_pillarId_fkey" FOREIGN KEY ("pillarId") REFERENCES "InstrumentPillar"("id") ON DELETE RESTRICT ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "InstrumentOpenQuestion" ADD CONSTRAINT "InstrumentOpenQuestion_versionId_fkey" FOREIGN KEY ("versionId") REFERENCES "InstrumentVersion"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
