-- ============================================================================
-- Carboany Harness System — ESG 이벤트 스키마
-- Migration: 005_events
--
-- 설계 원칙:
--   1. 이벤트 = 스폰서 기업의 ESG 활동 프로젝트 (캠페인과 별도)
--   2. 참여자별 검증: event_verifications로 개별 인증 관리
--   3. SaaS 수수료: 이벤트별 과금 기록 (saas_fee_paid)
-- ============================================================================

-- ────────────────────────────────────────────────────────────────────────────
-- 1. ESG 이벤트 (Events)
--    기업 ESG 활동 프로젝트 — 나무 심기, 폐기물 수거 등
-- ────────────────────────────────────────────────────────────────────────────

CREATE TABLE events (
    id                      UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    org_id                  UUID NOT NULL REFERENCES organizations(id),
    title                   VARCHAR(300) NOT NULL,
    event_type              VARCHAR(30)
                                CHECK (event_type IN (
                                    'tree_planting', 'waste_collection', 'energy_saving',
                                    'water_saving', 'recycling', 'carbon_offset', 'other'
                                )),
    status                  VARCHAR(20) DEFAULT 'draft' NOT NULL
                                CHECK (status IN ('draft', 'active', 'completed', 'cancelled')),

    -- 기간
    start_date              DATE NOT NULL,
    end_date                DATE NOT NULL,
    CONSTRAINT chk_event_dates CHECK (end_date >= start_date),

    -- 참여 목표
    target_participants     INT DEFAULT 0,

    -- 환경 성과 지표
    co2_reduction_kg        DECIMAL(10, 2) DEFAULT 0,
    waste_collected_kg      DECIMAL(10, 2),
    trees_planted           INT,

    -- 보상/과금
    eco_points              BIGINT DEFAULT 0,         -- 지급된 에코포인트 총량
    saas_fee_paid           BIGINT DEFAULT 0,         -- SaaS 사용 수수료 (KRW)

    created_at              TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL,
    updated_at              TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
);

CREATE INDEX idx_events_org ON events(org_id);
CREATE INDEX idx_events_status ON events(status);
CREATE INDEX idx_events_dates ON events(start_date, end_date);

-- ────────────────────────────────────────────────────────────────────────────
-- 2. 이벤트 참여 인증 (Event Verifications)
--    이벤트 참여자 개별 활동 인증 기록
-- ────────────────────────────────────────────────────────────────────────────

CREATE TABLE event_verifications (
    id              UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    event_id        UUID NOT NULL REFERENCES events(id) ON DELETE CASCADE,
    user_id         UUID NOT NULL REFERENCES users(id),

    -- 인증 데이터
    type            VARCHAR(20)
                        CHECK (type IN ('photo', 'gps', 'receipt', 'manual')),
    payload_url     VARCHAR(500),                 -- GCS 경로
    value           VARCHAR(300),                 -- 인증 값 (예: "5.2kg", "3그루")

    -- 상태
    status          VARCHAR(20) DEFAULT 'pending' NOT NULL
                        CHECK (status IN ('pending', 'verified', 'rejected')),
    verified_at     TIMESTAMPTZ,

    created_at      TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP NOT NULL
);

CREATE INDEX idx_event_verify_event ON event_verifications(event_id);
CREATE INDEX idx_event_verify_user ON event_verifications(user_id);
CREATE INDEX idx_event_verify_status ON event_verifications(status) WHERE status = 'pending';
