-- Phase 5 Database Schema Changes (Updated)
-- Run this script to add tables for Celestial Events and User Follows
-- Note: Channel messages are now stored in Redis, so no table is created for them.

BEGIN;

-- 1. Celestial Events Table
CREATE TABLE IF NOT EXISTS "public"."celestial_events" (
    "id" SERIAL PRIMARY KEY,
    "body_id" VARCHAR(50) NOT NULL REFERENCES "public"."celestial_bodies"("id") ON DELETE CASCADE,
    "title" VARCHAR(200) NOT NULL,
    "event_type" VARCHAR(50) NOT NULL, -- 'approach' (close approach), 'opposition' (冲日), etc.
    "event_time" TIMESTAMP NOT NULL,
    "description" TEXT,
    "details" JSONB, -- Store distance (nominal_dist_au), v_rel, etc.
    "source" VARCHAR(50) DEFAULT 'nasa_sbdb',
    "created_at" TIMESTAMP DEFAULT NOW()
);

CREATE INDEX "idx_celestial_events_body_id" ON "public"."celestial_events" ("body_id");
CREATE INDEX "idx_celestial_events_time" ON "public"."celestial_events" ("event_time");
COMMENT ON TABLE "public"."celestial_events" IS '天体动态事件表 (如飞掠、冲日)';

-- 2. User Follows Table (Relationships)
CREATE TABLE IF NOT EXISTS "public"."user_follows" (
    "user_id" INTEGER NOT NULL REFERENCES "public"."users"("id") ON DELETE CASCADE,
    "body_id" VARCHAR(50) NOT NULL REFERENCES "public"."celestial_bodies"("id") ON DELETE CASCADE,
    "created_at" TIMESTAMP DEFAULT NOW(),
    PRIMARY KEY ("user_id", "body_id")
);

CREATE INDEX "idx_user_follows_user" ON "public"."user_follows" ("user_id");
COMMENT ON TABLE "public"."user_follows" IS '用户关注天体关联表';

-- 3. Ensure 'icon' is in resources check constraint (Idempotent check)
-- Dropping and recreating constraint is the safest way to ensure 'icon' is present if it wasn't
ALTER TABLE "public"."resources" DROP CONSTRAINT IF EXISTS "chk_resource_type";
ALTER TABLE "public"."resources" ADD CONSTRAINT "chk_resource_type" 
    CHECK (resource_type IN ('texture', 'model', 'icon', 'thumbnail', 'data'));

COMMIT;