import os
import mysql.connector
from mysql.connector import Error

DB_CONFIG = {
    "host": os.environ.get("DB_HOST", "officialsite.kr"),
    "port": int(os.environ.get("DB_PORT", "23306")),
    "user": os.environ.get("DB_USER", "admin"),
    "password": os.environ.get("DB_PASSWORD", "dlgks~123"),
    "database": os.environ.get("DB_NAME", "app_master"),
}


CREATE_TABLE_SQL = """
CREATE TABLE IF NOT EXISTS app_version_management (
  app_name VARCHAR(50) PRIMARY KEY,
  latest_version VARCHAR(50) NOT NULL DEFAULT '1.0.0' COMMENT '권장 최신 버전',
  min_supported_version VARCHAR(50) DEFAULT NULL COMMENT '최소 지원 버전 (강제 업데이트 기준)',
  update_mode ENUM('recommended', 'force') NOT NULL DEFAULT 'recommended' COMMENT '업데이트 안내 모드',
  update_title VARCHAR(255) DEFAULT '새 버전이 있어요' COMMENT '업데이트 팝업 제목',
  update_title_en VARCHAR(255) DEFAULT NULL COMMENT '업데이트 팝업 제목(영어)',
  update_title_ja VARCHAR(255) DEFAULT NULL COMMENT '업데이트 팝업 제목(일본어)',
  update_title_zh VARCHAR(255) DEFAULT NULL COMMENT '업데이트 팝업 제목(중국어)',
  update_message TEXT COMMENT '업데이트 팝업 안내 문구',
  update_message_en TEXT COMMENT '업데이트 팝업 안내 문구(영어)',
  update_message_ja TEXT COMMENT '업데이트 팝업 안내 문구(일본어)',
  update_message_zh TEXT COMMENT '업데이트 팝업 안내 문구(중국어)',
  android_store_url VARCHAR(500) DEFAULT NULL COMMENT '안드로이드 스토어 링크',
  ios_store_url VARCHAR(500) DEFAULT NULL COMMENT 'iOS 앱스토어 링크',
  is_enabled BOOLEAN NOT NULL DEFAULT FALSE COMMENT '업데이트 안내 사용 여부',
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
"""


ADD_COLUMNS = [
    (
        "update_title_en",
        "ALTER TABLE app_version_management ADD COLUMN update_title_en VARCHAR(255) DEFAULT NULL COMMENT '업데이트 팝업 제목(영어)'",
    ),
    (
        "update_title_ja",
        "ALTER TABLE app_version_management ADD COLUMN update_title_ja VARCHAR(255) DEFAULT NULL COMMENT '업데이트 팝업 제목(일본어)'",
    ),
    (
        "update_title_zh",
        "ALTER TABLE app_version_management ADD COLUMN update_title_zh VARCHAR(255) DEFAULT NULL COMMENT '업데이트 팝업 제목(중국어)'",
    ),
    (
        "update_message_en",
        "ALTER TABLE app_version_management ADD COLUMN update_message_en TEXT COMMENT '업데이트 팝업 안내 문구(영어)'",
    ),
    (
        "update_message_ja",
        "ALTER TABLE app_version_management ADD COLUMN update_message_ja TEXT COMMENT '업데이트 팝업 안내 문구(일본어)'",
    ),
    (
        "update_message_zh",
        "ALTER TABLE app_version_management ADD COLUMN update_message_zh TEXT COMMENT '업데이트 팝업 안내 문구(중국어)'",
    ),
]


SEED_SQL = """
INSERT INTO app_version_management (
  app_name,
  latest_version,
  min_supported_version,
  update_mode,
  update_title,
  update_title_en,
  update_title_ja,
  update_title_zh,
  update_message,
  update_message_en,
  update_message_ja,
  update_message_zh,
  android_store_url,
  ios_store_url,
  is_enabled
) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
ON DUPLICATE KEY UPDATE
  updated_at = updated_at
"""


BACKFILL_SQL = """
UPDATE app_version_management
SET
  update_title_en = COALESCE(NULLIF(TRIM(update_title_en), ''), %s),
  update_title_ja = COALESCE(NULLIF(TRIM(update_title_ja), ''), %s),
  update_title_zh = COALESCE(NULLIF(TRIM(update_title_zh), ''), %s),
  update_message_en = COALESCE(NULLIF(TRIM(update_message_en), ''), %s),
  update_message_ja = COALESCE(NULLIF(TRIM(update_message_ja), ''), %s),
  update_message_zh = COALESCE(NULLIF(TRIM(update_message_zh), ''), %s)
WHERE app_name IN ('babynote', 'calmoa')
"""


def add_column_if_missing(cursor, conn, column_name, ddl):
    try:
        cursor.execute(ddl)
        conn.commit()
        print(f"OK: add column {column_name}")
    except Error as error:
        if getattr(error, "errno", None) == 1060:
            print(f"SKIP: column {column_name} already exists")
        else:
            raise


def run():
    conn = None
    cursor = None
    try:
        conn = mysql.connector.connect(**DB_CONFIG)
        cursor = conn.cursor()
        print("DB Connected")

        cursor.execute(CREATE_TABLE_SQL)
        conn.commit()
        print("OK: create app_version_management")

        for column_name, ddl in ADD_COLUMNS:
            add_column_if_missing(cursor, conn, column_name, ddl)

        cursor.execute(
            SEED_SQL,
            (
                "babynote",
                "1.0.0",
                None,
                "recommended",
                "새 버전이 있어요",
                "New version available",
                "新しいバージョンがあります",
                "有新版本可用",
                "더 안정적인 사용을 위해 최신 버전으로 업데이트해 주세요.",
                "Please update to the latest version for a more stable experience.",
                "より安定したご利用のため、最新バージョンにアップデートしてください。",
                "为了获得更稳定的体验，请更新到最新版本。",
                "",
                "",
                0,
            ),
        )
        conn.commit()
        print("OK: seed babynote app_version_management")

        cursor.execute(
            SEED_SQL,
            (
                "calmoa",
                "1.0.11",
                "1.0.0",
                "recommended",
                "새 버전이 있어요",
                "New version available",
                "新しいバージョンがあります",
                "有新版本可用",
                "더 안정적인 사용을 위해 최신 버전으로 업데이트해 주세요.",
                "Please update to the latest version for a more stable experience.",
                "より安定したご利用のため、最新バージョンにアップデートしてください。",
                "为了获得更稳定的体验，请更新到最新版本。",
                "https://play.google.com/store/apps/details?id=com.brosister.calmoa",
                "https://apps.apple.com/kr/app/calmoa/id6740519891",
                0,
            ),
        )
        conn.commit()
        print("OK: seed calmoa app_version_management")

        cursor.execute(
            BACKFILL_SQL,
            (
                "New version available",
                "新しいバージョンがあります",
                "有新版本可用",
                "Please update to the latest version for a more stable experience.",
                "より安定したご利用のため、最新バージョンにアップデートしてください。",
                "为了获得更稳定的体验，请更新到最新版本。",
            ),
        )
        conn.commit()
        print("OK: backfill app version management translations")

        print("\n=== app version management migration completed ===")
    finally:
        if cursor is not None:
            cursor.close()
        if conn is not None and conn.is_connected():
            conn.close()
            print("DB connection closed")


if __name__ == "__main__":
    run()
