﻿#!/usr/bin/env python3
import os
import sys
import uuid
from pathlib import Path

def load_env(env_path: Path) -> dict:
    data = {}
    if not env_path.exists():
        return data
    for line in env_path.read_text(encoding='utf-8').splitlines():
        line = line.strip()
        if not line or line.startswith('#') or '=' not in line:
            continue
        key, value = line.split('=', 1)
        data[key.strip()] = value.strip()
    return data

def get_mysql_connector():
    try:
        import mysql.connector  # type: ignore
        return mysql.connector
    except Exception:
        print('mysql-connector-python is required. Install with: pip install mysql-connector-python', file=sys.stderr)
        sys.exit(1)

def ensure_column(cursor, db_name, table, column, ddl):
    cursor.execute(
        """
        SELECT COUNT(*)
        FROM information_schema.columns
        WHERE table_schema = %s AND table_name = %s AND column_name = %s
        """,
        (db_name, table, column),
    )
    exists = cursor.fetchone()[0] > 0
    if not exists:
        cursor.execute(ddl)


def main():
    env_path = Path(__file__).with_name('.env')
    env = {**os.environ, **load_env(env_path)}

    db_host = env.get('DB_HOST')
    db_user = env.get('DB_USER')
    db_password = env.get('DB_PASSWORD')
    db_port = int(env.get('DB_PORT', '3306'))
    db_name = env.get('DB_NAME')

    if not all([db_host, db_user, db_password, db_name]):
        print('Missing DB_* settings. Check your .env file.', file=sys.stderr)
        sys.exit(1)

    mysql = get_mysql_connector()
    conn = mysql.connect(
        host=db_host,
        user=db_user,
        password=db_password,
        port=db_port,
        database=db_name,
        charset='utf8mb4',
    )
    cursor = conn.cursor()

    ensure_column(
        cursor,
        db_name,
        'ramen_timer_ramens',
        'name_ko',
        'ALTER TABLE ramen_timer_ramens ADD COLUMN name_ko VARCHAR(255) NULL AFTER name',
    )
    ensure_column(
        cursor,
        db_name,
        'ramen_timer_ramens',
        'name_en',
        'ALTER TABLE ramen_timer_ramens ADD COLUMN name_en VARCHAR(255) NULL AFTER name_ko',
    )
    ensure_column(
        cursor,
        db_name,
        'ramen_timer_ramens',
        'note_ko',
        'ALTER TABLE ramen_timer_ramens ADD COLUMN note_ko TEXT NULL AFTER note',
    )
    ensure_column(
        cursor,
        db_name,
        'ramen_timer_ramens',
        'note_en',
        'ALTER TABLE ramen_timer_ramens ADD COLUMN note_en TEXT NULL AFTER note_ko',
    )

    # 실사용에서 많이 찾는 라면 위주로 기본 데이터 확장
    default_ramens = [
        # 기본
        {'name_ko': '신라면', 'name_en': 'Shin Ramyun', 'emoji': '🔥', 'base_seconds': 240, 'note_ko': None, 'note_en': None, 'is_custom': 0, 'sort_order': 0},
        {'name_ko': '진라면', 'name_en': 'Jin Ramyun', 'emoji': '🔥', 'base_seconds': 240, 'note_ko': None, 'note_en': None, 'is_custom': 0, 'sort_order': 1},
        {'name_ko': '너구리/우동', 'name_en': 'Neoguri / Udon', 'emoji': '♨️', 'base_seconds': 270, 'note_ko': None, 'note_en': None, 'is_custom': 0, 'sort_order': 2},
        {'name_ko': '짜장라면', 'name_en': 'Jjajang Ramyun', 'emoji': '🍲', 'base_seconds': 270, 'note_ko': None, 'note_en': None, 'is_custom': 0, 'sort_order': 3},
        {'name_ko': '불닭/비빔면', 'name_en': 'Buldak / Bibim', 'emoji': '🌶️', 'base_seconds': 270, 'note_ko': '불닭은 물은 반만, 비빔면은 찬물 사용 권장!', 'note_en': 'Use half the water for Buldak. For Bibim, rinse with cold water.', 'is_custom': 0, 'sort_order': 4},
        {'name_ko': '작은컵', 'name_en': 'Cup (Small)', 'emoji': '🥤', 'base_seconds': 150, 'note_ko': None, 'note_en': None, 'is_custom': 0, 'sort_order': 5},
        {'name_ko': '큰컵', 'name_en': 'Cup (Large)', 'emoji': '🥤', 'base_seconds': 210, 'note_ko': None, 'note_en': None, 'is_custom': 0, 'sort_order': 6},
        {'name_ko': '직접 입력', 'name_en': 'Custom', 'emoji': '⏱️', 'base_seconds': 240, 'note_ko': None, 'note_en': None, 'is_custom': 1, 'sort_order': 7},

        # 인기(봉지)
        {'name_ko': '안성탕면', 'name_en': 'Anseongtangmyeon', 'emoji': '🍜', 'base_seconds': 270, 'note_ko': None, 'note_en': None, 'is_custom': 0, 'sort_order': 8},
        {'name_ko': '참깨라면', 'name_en': 'Sesame Ramyun', 'emoji': '🥚', 'base_seconds': 270, 'note_ko': None, 'note_en': None, 'is_custom': 0, 'sort_order': 9},
        {'name_ko': '스낵면', 'name_en': 'Snack Ramyun', 'emoji': '🍥', 'base_seconds': 240, 'note_ko': None, 'note_en': None, 'is_custom': 0, 'sort_order': 10},
        {'name_ko': '육개장(봉지)', 'name_en': 'Yukgaejang (Bag)', 'emoji': '🍲', 'base_seconds': 240, 'note_ko': None, 'note_en': None, 'is_custom': 0, 'sort_order': 11},
        {'name_ko': '새우탕', 'name_en': 'Shrimp Ramyun', 'emoji': '🦐', 'base_seconds': 270, 'note_ko': None, 'note_en': None, 'is_custom': 0, 'sort_order': 12},
        {'name_ko': '오징어짬뽕', 'name_en': 'Squid Jjambbong', 'emoji': '🦑', 'base_seconds': 270, 'note_ko': None, 'note_en': None, 'is_custom': 0, 'sort_order': 13},
        {'name_ko': '진짬뽕', 'name_en': 'Jin Jjambbong', 'emoji': '🌊', 'base_seconds': 270, 'note_ko': None, 'note_en': None, 'is_custom': 0, 'sort_order': 14},
        {'name_ko': '짜파게티', 'name_en': 'Chapagetti', 'emoji': '🍝', 'base_seconds': 300, 'note_ko': '물 버리고 비비기(면수 6~8스푼)', 'note_en': 'Drain and mix (save a few spoons of water).', 'is_custom': 0, 'sort_order': 15},
        {'name_ko': '짜왕', 'name_en': 'Jjawang', 'emoji': '🍝', 'base_seconds': 300, 'note_ko': '면수 조금 남기고 비비기', 'note_en': 'Leave a little water and mix.', 'is_custom': 0, 'sort_order': 16},
        {'name_ko': '팔도비빔면', 'name_en': 'Paldo Bibimmen', 'emoji': '🧊', 'base_seconds': 270, 'note_ko': '찬물에 충분히 헹구기', 'note_en': 'Rinse well in cold water.', 'is_custom': 0, 'sort_order': 17},
        {'name_ko': '틈새라면', 'name_en': 'Teumsae Ramyun', 'emoji': '🌶️', 'base_seconds': 240, 'note_ko': None, 'note_en': None, 'is_custom': 0, 'sort_order': 18},
        {'name_ko': '불닭볶음면', 'name_en': 'Buldak Hot Chicken', 'emoji': '🌶️', 'base_seconds': 270, 'note_ko': '물 8스푼 정도 남기고 볶기', 'note_en': 'Leave a few spoons of water and stir-fry.', 'is_custom': 0, 'sort_order': 19},
        {'name_ko': '까르보불닭', 'name_en': 'Carbo Buldak', 'emoji': '🧀', 'base_seconds': 270, 'note_ko': '물 조금 남기고 비비기', 'note_en': 'Leave a little water and mix.', 'is_custom': 0, 'sort_order': 20},
        {'name_ko': '치즈불닭', 'name_en': 'Cheese Buldak', 'emoji': '🧀', 'base_seconds': 270, 'note_ko': None, 'note_en': None, 'is_custom': 0, 'sort_order': 21},
        {'name_ko': '불닭짜장', 'name_en': 'Buldak Jjajang', 'emoji': '🌶️', 'base_seconds': 300, 'note_ko': None, 'note_en': None, 'is_custom': 0, 'sort_order': 22},
        {'name_ko': '열라면', 'name_en': 'Yeol Ramyun', 'emoji': '🔥', 'base_seconds': 240, 'note_ko': None, 'note_en': None, 'is_custom': 0, 'sort_order': 23},
        {'name_ko': '꼬꼬면', 'name_en': 'Kkokkomyeon', 'emoji': '🐔', 'base_seconds': 270, 'note_ko': None, 'note_en': None, 'is_custom': 0, 'sort_order': 24},
        {'name_ko': '해물라면', 'name_en': 'Seafood Ramyun', 'emoji': '🦪', 'base_seconds': 270, 'note_ko': None, 'note_en': None, 'is_custom': 0, 'sort_order': 25},
        {'name_ko': '김치라면', 'name_en': 'Kimchi Ramyun', 'emoji': '🥬', 'base_seconds': 240, 'note_ko': None, 'note_en': None, 'is_custom': 0, 'sort_order': 26},
        {'name_ko': '사리면', 'name_en': 'Sari Ramen (Noodles)', 'emoji': '➕', 'base_seconds': 180, 'note_ko': '추가 사리 기본 3분', 'note_en': 'Extra noodles: about 3 minutes.', 'is_custom': 0, 'sort_order': 27},

        # 인기(컵/사발)
        {'name_ko': '육개장 사발면', 'name_en': 'Yukgaejang Cup', 'emoji': '🥤', 'base_seconds': 180, 'note_ko': None, 'note_en': None, 'is_custom': 0, 'sort_order': 28},
        {'name_ko': '왕뚜껑', 'name_en': 'Wang Ttukkeong', 'emoji': '🥤', 'base_seconds': 210, 'note_ko': None, 'note_en': None, 'is_custom': 0, 'sort_order': 29},
        {'name_ko': '큰사발(기본)', 'name_en': 'Big Bowl (Default)', 'emoji': '🥣', 'base_seconds': 210, 'note_ko': None, 'note_en': None, 'is_custom': 0, 'sort_order': 30},
        {'name_ko': '작은사발(기본)', 'name_en': 'Small Bowl (Default)', 'emoji': '🥣', 'base_seconds': 180, 'note_ko': None, 'note_en': None, 'is_custom': 0, 'sort_order': 31},
        {'name_ko': '너구리(컵)', 'name_en': 'Neoguri Cup', 'emoji': '🥤', 'base_seconds': 210, 'note_ko': None, 'note_en': None, 'is_custom': 0, 'sort_order': 32},
        {'name_ko': '진라면(컵)', 'name_en': 'Jin Ramyun Cup', 'emoji': '🥤', 'base_seconds': 180, 'note_ko': None, 'note_en': None, 'is_custom': 0, 'sort_order': 33},
        {'name_ko': '신라면(컵)', 'name_en': 'Shin Ramyun Cup', 'emoji': '🥤', 'base_seconds': 180, 'note_ko': None, 'note_en': None, 'is_custom': 0, 'sort_order': 34},
        {'name_ko': '불닭(컵)', 'name_en': 'Buldak Cup', 'emoji': '🥤', 'base_seconds': 210, 'note_ko': '전자레인지 사용 시 용기 주의', 'note_en': 'Be careful with microwave-safe containers.', 'is_custom': 0, 'sort_order': 35},

        # 변형/취향
        {'name_ko': '신라면 블랙', 'name_en': 'Shin Ramyun Black', 'emoji': '🖤', 'base_seconds': 270, 'note_ko': None, 'note_en': None, 'is_custom': 0, 'sort_order': 36},
        {'name_ko': '진라면(순한맛)', 'name_en': 'Jin Ramyun (Mild)', 'emoji': '😊', 'base_seconds': 240, 'note_ko': None, 'note_en': None, 'is_custom': 0, 'sort_order': 37},
        {'name_ko': '진라면(매운맛)', 'name_en': 'Jin Ramyun (Spicy)', 'emoji': '🔥', 'base_seconds': 240, 'note_ko': None, 'note_en': None, 'is_custom': 0, 'sort_order': 38},
        {'name_ko': '비빔면(매콤)', 'name_en': 'Spicy Bibim', 'emoji': '🧊', 'base_seconds': 270, 'note_ko': None, 'note_en': None, 'is_custom': 0, 'sort_order': 39},
        {'name_ko': '냉라면(비빔)', 'name_en': 'Cold Bibim Ramen', 'emoji': '🧊', 'base_seconds': 270, 'note_ko': '찬물 헹굼 + 얼음 추천', 'note_en': 'Rinse with cold water; add ice if you like.', 'is_custom': 0, 'sort_order': 40},
        {'name_ko': '우동(굵은면)', 'name_en': 'Udon (Thick Noodles)', 'emoji': '🍥', 'base_seconds': 300, 'note_ko': None, 'note_en': None, 'is_custom': 0, 'sort_order': 41},
        {'name_ko': '짬뽕(해장)', 'name_en': 'Jjambbong (Spicy Seafood)', 'emoji': '🌶️', 'base_seconds': 270, 'note_ko': None, 'note_en': None, 'is_custom': 0, 'sort_order': 42},
    ]

    for ramen in default_ramens:
        cursor.execute(
            'SELECT id, is_active FROM ramen_timer_ramens WHERE name_ko = %s OR name = %s LIMIT 1',
            (ramen['name_ko'], ramen['name_ko']),
        )
        row = cursor.fetchone()
        if row:
            ramen_id, existing_active = row[0], row[1]
            cursor.execute(
                """
                UPDATE ramen_timer_ramens
                SET name = %s,
                    name_ko = %s,
                    name_en = %s,
                    emoji = %s,
                    base_seconds = %s,
                    note = %s,
                    note_ko = %s,
                    note_en = %s,
                    is_custom = %s,
                    sort_order = %s,
                    is_active = %s,
                    updated_at = NOW()
                WHERE id = %s
                """,
                (
                    ramen['name_ko'],
                    ramen['name_ko'],
                    ramen['name_en'],
                    ramen['emoji'],
                    ramen['base_seconds'],
                    ramen['note_ko'],
                    ramen['note_ko'],
                    ramen['note_en'],
                    ramen['is_custom'],
                    ramen['sort_order'],
                    1 if existing_active is None else int(existing_active),
                    ramen_id,
                ),
            )
        else:
            cursor.execute(
                """
                INSERT INTO ramen_timer_ramens
                (id, name, name_ko, name_en, emoji, base_seconds, note, note_ko, note_en, is_custom, sort_order, is_active)
                VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, 1)
                """,
                (
                    str(uuid.uuid4()),
                    ramen['name_ko'],
                    ramen['name_ko'],
                    ramen['name_en'],
                    ramen['emoji'],
                    ramen['base_seconds'],
                    ramen['note_ko'],
                    ramen['note_ko'],
                    ramen['note_en'],
                    ramen['is_custom'],
                    ramen['sort_order'],
                ),
            )

    conn.commit()
    cursor.close()
    conn.close()
    print('Ramen timer data initialized successfully.')

if __name__ == '__main__':
    main()
