-- CreateTable
CREATE TABLE "paises" (
    "id" SERIAL NOT NULL,
    "codigo" VARCHAR(3) NOT NULL,
    "codigo_alpha2" VARCHAR(2) NOT NULL,
    "nombre" VARCHAR(100) NOT NULL,
    "nombre_en" VARCHAR(100) NOT NULL,
    "capital" VARCHAR(100) NOT NULL,
    "region" VARCHAR(50) NOT NULL,
    "subregion" VARCHAR(50) NOT NULL,
    "emoji" VARCHAR(10) NOT NULL,
    "latitud" DECIMAL(10,8),
    "longitud" DECIMAL(11,8),
    "activo" BOOLEAN NOT NULL DEFAULT true,
    "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,

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

-- CreateTable
CREATE TABLE "departamentos" (
    "id" SERIAL NOT NULL,
    "codigo" VARCHAR(2) NOT NULL,
    "nombre" VARCHAR(100) NOT NULL,
    "latitud" DECIMAL(10,8),
    "longitud" DECIMAL(11,8),
    "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,

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

-- CreateTable
CREATE TABLE "provincias" (
    "id" SERIAL NOT NULL,
    "codigo" VARCHAR(4) NOT NULL,
    "codigo_dep" VARCHAR(2) NOT NULL,
    "nombre" VARCHAR(100) NOT NULL,
    "latitud" DECIMAL(10,8),
    "longitud" DECIMAL(11,8),
    "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,

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

-- CreateTable
CREATE TABLE "distritos" (
    "id" SERIAL NOT NULL,
    "codigo" VARCHAR(6) NOT NULL,
    "codigo_prov" VARCHAR(4) NOT NULL,
    "codigo_dep" VARCHAR(2) NOT NULL,
    "nombre" VARCHAR(100) NOT NULL,
    "capital" VARCHAR(100),
    "categoria" VARCHAR(30),
    "altitud" DECIMAL(10,2),
    "poblacion" INTEGER,
    "latitud" DECIMAL(10,8),
    "longitud" DECIMAL(11,8),
    "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,

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

-- CreateIndex
CREATE UNIQUE INDEX "paises_codigo_key" ON "paises"("codigo");

-- CreateIndex
CREATE UNIQUE INDEX "paises_codigo_alpha2_key" ON "paises"("codigo_alpha2");

-- CreateIndex
CREATE INDEX "paises_codigo_idx" ON "paises"("codigo");

-- CreateIndex
CREATE INDEX "paises_codigo_alpha2_idx" ON "paises"("codigo_alpha2");

-- CreateIndex
CREATE INDEX "paises_nombre_idx" ON "paises"("nombre");

-- CreateIndex
CREATE INDEX "paises_region_idx" ON "paises"("region");

-- CreateIndex
CREATE UNIQUE INDEX "departamentos_codigo_key" ON "departamentos"("codigo");

-- CreateIndex
CREATE INDEX "departamentos_codigo_idx" ON "departamentos"("codigo");

-- CreateIndex
CREATE INDEX "departamentos_nombre_idx" ON "departamentos"("nombre");

-- CreateIndex
CREATE UNIQUE INDEX "provincias_codigo_key" ON "provincias"("codigo");

-- CreateIndex
CREATE INDEX "provincias_codigo_idx" ON "provincias"("codigo");

-- CreateIndex
CREATE INDEX "provincias_codigo_dep_idx" ON "provincias"("codigo_dep");

-- CreateIndex
CREATE INDEX "provincias_nombre_idx" ON "provincias"("nombre");

-- CreateIndex
CREATE UNIQUE INDEX "distritos_codigo_key" ON "distritos"("codigo");

-- CreateIndex
CREATE INDEX "distritos_codigo_idx" ON "distritos"("codigo");

-- CreateIndex
CREATE INDEX "distritos_codigo_prov_idx" ON "distritos"("codigo_prov");

-- CreateIndex
CREATE INDEX "distritos_codigo_dep_idx" ON "distritos"("codigo_dep");

-- CreateIndex
CREATE INDEX "distritos_nombre_idx" ON "distritos"("nombre");

-- AddForeignKey
ALTER TABLE "provincias" ADD CONSTRAINT "provincias_codigo_dep_fkey" FOREIGN KEY ("codigo_dep") REFERENCES "departamentos"("codigo") ON DELETE RESTRICT ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE "distritos" ADD CONSTRAINT "distritos_codigo_prov_fkey" FOREIGN KEY ("codigo_prov") REFERENCES "provincias"("codigo") ON DELETE RESTRICT ON UPDATE CASCADE;
