import { APP_PATH } from "@server/lib/consts";
import Database from "better-sqlite3";
import path from "path";

const version = "1.10.1";

export default async function migration() {
    console.log(`Running setup script ${version}...`);

    const location = path.join(APP_PATH, "db", "db.sqlite");
    const db = new Database(location);

    try {
        db.pragma("foreign_keys = OFF");

        db.transaction(() => {
            db.exec(`ALTER TABLE "targets" RENAME TO "targets_old";
--> statement-breakpoint
CREATE TABLE "targets" (
    "targetId" INTEGER PRIMARY KEY AUTOINCREMENT,
    "resourceId" INTEGER NOT NULL,
    "siteId" INTEGER NOT NULL,
    "ip" TEXT NOT NULL,
    "method" TEXT,
    "port" INTEGER NOT NULL,
    "internalPort" INTEGER,
    "enabled" INTEGER NOT NULL DEFAULT 1,
    "path" TEXT,
    "pathMatchType" TEXT,
    FOREIGN KEY ("resourceId") REFERENCES "resources"("resourceId") ON UPDATE no action ON DELETE cascade,
    FOREIGN KEY ("siteId") REFERENCES "sites"("siteId") ON UPDATE no action ON DELETE cascade
);
--> statement-breakpoint
INSERT INTO "targets" (
    "targetId",
    "resourceId",
    "siteId",
    "ip",
    "method",
    "port",
    "internalPort",
    "enabled",
    "path",
    "pathMatchType"
)
SELECT
    targetId,
    resourceId,
    siteId,
    ip,
    method,
    port,
    internalPort,
    enabled,
    path,
    pathMatchType
FROM "targets_old";
--> statement-breakpoint
DROP TABLE "targets_old";`);
        })();

        db.pragma("foreign_keys = ON");

        console.log(`Migrated database`);
    } catch (e) {
        console.log("Failed to migrate db:", e);
        throw e;
    }
}
