-- ============================================================
-- GoldenChart 전용 테이블 (V2)
-- 기존 stockAnalyzer DB 에 추가
-- ============================================================

-- ────────────────────────────────────────────────────────────
-- 1. gc_chart_workspace  — 사용자 차트 워크스페이스
-- ────────────────────────────────────────────────────────────
CREATE TABLE IF NOT EXISTS gc_chart_workspace (
    id              BIGINT       NOT NULL AUTO_INCREMENT,
    user_id         BIGINT       NULL     COMMENT 'users.id 논리 참조 (로그인 사용자)',
    device_id       VARCHAR(100) NULL     COMMENT '비회원 기기 식별자',
    layout_id       VARCHAR(20)  NOT NULL DEFAULT '1x1' COMMENT '레이아웃 (1x1/2x1/1x2/2x2/3x1 등)',
    sync_options_json JSON       NULL     COMMENT '차트 간 동기화 옵션 {symbol, timeframe, crosshair}',
    created_at      DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at      DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (id),
    INDEX idx_gc_ws_user   (user_id),
    INDEX idx_gc_ws_device (device_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
  COMMENT='GoldenChart 멀티차트 워크스페이스 설정';

-- ────────────────────────────────────────────────────────────
-- 2. gc_chart_slot  — 슬롯별 차트 설정
-- ────────────────────────────────────────────────────────────
CREATE TABLE IF NOT EXISTS gc_chart_slot (
    id                   BIGINT      NOT NULL AUTO_INCREMENT,
    workspace_id         BIGINT      NOT NULL COMMENT 'gc_chart_workspace.id',
    slot_index           INT         NOT NULL DEFAULT 0 COMMENT '슬롯 인덱스 (0-based)',
    symbol               VARCHAR(50) NULL     COMMENT '종목 코드 (KRW-BTC, AAPL 등)',
    timeframe            VARCHAR(10) NULL     COMMENT '타임프레임 (1m/5m/15m/30m/1h/4h/1D/1W/1M)',
    chart_type           VARCHAR(20) NOT NULL DEFAULT 'candlestick',
    theme                VARCHAR(20) NOT NULL DEFAULT 'dark',
    mode                 VARCHAR(20) NOT NULL DEFAULT 'chart' COMMENT 'chart / trading',
    log_scale            TINYINT(1)  NOT NULL DEFAULT 0,
    indicators_json      JSON        NULL     COMMENT 'IndicatorConfig[] — 보조지표 설정 배열',
    drawings_json        JSON        NULL     COMMENT 'Drawing[] — 드로잉 객체 배열',
    drawings_locked      TINYINT(1)  NOT NULL DEFAULT 0,
    drawings_visible     TINYINT(1)  NOT NULL DEFAULT 1,
    pane_layout_json     JSON        NULL     COMMENT '보조지표 창 높이 배열 [{paneIndex, height}]',
    main_chart_style_json JSON       NULL     COMMENT '캔들 색상 등 메인 차트 스타일',
    created_at           DATETIME    NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at           DATETIME    NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (id),
    UNIQUE KEY uk_slot_workspace_index (workspace_id, slot_index),
    INDEX idx_gc_slot_ws (workspace_id),
    CONSTRAINT fk_gc_slot_workspace FOREIGN KEY (workspace_id)
        REFERENCES gc_chart_workspace(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
  COMMENT='GoldenChart 슬롯별 차트 설정 (지표·드로잉 포함)';

-- ────────────────────────────────────────────────────────────
-- 3. gc_watchlist  — 관심종목
-- ────────────────────────────────────────────────────────────
CREATE TABLE IF NOT EXISTS gc_watchlist (
    id            BIGINT       NOT NULL AUTO_INCREMENT,
    user_id       BIGINT       NULL     COMMENT 'users.id 논리 참조',
    device_id     VARCHAR(100) NULL     COMMENT '비회원 기기 식별자',
    symbol        VARCHAR(50)  NOT NULL COMMENT 'KRW-BTC, AAPL 등',
    korean_name   VARCHAR(100) NULL,
    english_name  VARCHAR(100) NULL,
    display_order INT          NOT NULL DEFAULT 0,
    created_at    DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (id),
    UNIQUE KEY uk_watchlist_user_symbol   (user_id,   symbol),
    UNIQUE KEY uk_watchlist_device_symbol (device_id, symbol),
    INDEX idx_gc_wl_user   (user_id),
    INDEX idx_gc_wl_device (device_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
  COMMENT='GoldenChart 관심종목';

-- ────────────────────────────────────────────────────────────
-- 4. gc_holdings  — 보유종목
-- ────────────────────────────────────────────────────────────
CREATE TABLE IF NOT EXISTS gc_holdings (
    id            BIGINT         NOT NULL AUTO_INCREMENT,
    user_id       BIGINT         NULL     COMMENT 'users.id 논리 참조',
    device_id     VARCHAR(100)   NULL     COMMENT '비회원 기기 식별자',
    symbol        VARCHAR(50)    NOT NULL,
    korean_name   VARCHAR(100)   NULL,
    english_name  VARCHAR(100)   NULL,
    avg_price     DECIMAL(30, 8) NULL     COMMENT '평균 매입가',
    quantity      DECIMAL(30, 8) NULL     COMMENT '보유 수량',
    display_order INT            NOT NULL DEFAULT 0,
    created_at    DATETIME       NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at    DATETIME       NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (id),
    UNIQUE KEY uk_holdings_user_symbol   (user_id,   symbol),
    UNIQUE KEY uk_holdings_device_symbol (device_id, symbol),
    INDEX idx_gc_hld_user   (user_id),
    INDEX idx_gc_hld_device (device_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
  COMMENT='GoldenChart 보유종목';

-- ────────────────────────────────────────────────────────────
-- 5. gc_indicator_cache  — 지표 계산 캐시 (선택적 사용)
-- ────────────────────────────────────────────────────────────
CREATE TABLE IF NOT EXISTS gc_indicator_cache (
    id             BIGINT        NOT NULL AUTO_INCREMENT,
    cache_key      VARCHAR(200)  NOT NULL COMMENT 'symbol:timeframe:type:params_hash',
    symbol         VARCHAR(50)   NOT NULL,
    timeframe      VARCHAR(10)   NOT NULL,
    indicator_type VARCHAR(50)   NOT NULL,
    params_json    JSON          NULL     COMMENT '계산 파라미터',
    result_json    MEDIUMTEXT    NULL     COMMENT 'IndicatorResponse JSON',
    bar_count      INT           NULL     COMMENT '계산에 사용된 캔들 수',
    last_bar_time  BIGINT        NULL     COMMENT '마지막 캔들 Unix 타임스탬프(초)',
    computed_at    DATETIME      NOT NULL DEFAULT CURRENT_TIMESTAMP,
    expired_at     DATETIME      NULL     COMMENT 'NULL=영구, 설정 시 만료',
    PRIMARY KEY (id),
    UNIQUE KEY uk_gc_ind_cache_key (cache_key),
    INDEX idx_gc_cache_symbol_tf (symbol, timeframe),
    INDEX idx_gc_cache_expired (expired_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
  COMMENT='GoldenChart 지표 계산 결과 캐시';
