# 상사 계정 생성용 파일

import sys
import os
import bcrypt

# 현재 위치(app 외부)를 기준으로 
sys.path.append(os.path.dirname(__file__))

from app.core.config import get_db_config
import mysql.connector

def create_supervisor(supervisor_id: str, plain_password: str):
    config = get_db_config("Goalskill_login")
    config["use_pure"] = True # C extension bug 우회
    
    try:
        conn = mysql.connector.connect(**config)
        cursor = conn.cursor()
        
        # 1. 테이블이 혹시 없다면 생성 보장 (편의 제공)
        cursor.execute("""
            CREATE TABLE IF NOT EXISTS supervisor_users (
                id INT AUTO_INCREMENT PRIMARY KEY,
                supervisor_id VARCHAR(50) NOT NULL UNIQUE,
                password_hash VARCHAR(255) NOT NULL,
                session_id VARCHAR(50),
                created_at DATETIME DEFAULT CURRENT_TIMESTAMP
            )
        """)
        
        cursor.execute("""
            CREATE TABLE IF NOT EXISTS supervisor_learner_mapping (
                id INT AUTO_INCREMENT PRIMARY KEY,
                supervisor_id VARCHAR(50) NOT NULL,
                learner_session_id VARCHAR(50) NOT NULL,
                UNIQUE KEY (supervisor_id, learner_session_id)
            )
        """)
        
        # 2. 패스워드 해싱
        password_hash = bcrypt.hashpw(plain_password.encode('utf-8'), bcrypt.gensalt()).decode('utf-8')
        
        # 3. 계정 INSERT
        cursor.execute(
            "INSERT INTO supervisor_users (supervisor_id, password_hash) VALUES (%s, %s)",
            (supervisor_id, password_hash)
        )
        conn.commit()
        print(f"✅ 管理者アカウントの作成が完了！ (ID: {supervisor_id})")
        
    except mysql.connector.Error as e:
        if e.errno == 1062: # Duplicate entry
            print(f"⚠️ すでに存在するIDです: {supervisor_id}")
        else:
            print(f"❌ DBエラー: {e}")
    finally:
        if 'cursor' in locals(): cursor.close()
        if 'conn' in locals() and conn.is_connected(): conn.close()

if __name__ == "__main__":
    print("=== 管理者(Supervisor) 新規アカウント作成 ===")
    
    if len(sys.argv) >= 3:
        s_id = sys.argv[1]
        s_pw = sys.argv[2]
    else:
        # 터미널 인코딩 문제(surrogate)를 방지하기 위해 가급적 인자를 사용 권장
        s_id = input("作成する管理者ID: ").encode('utf-8', 'replace').decode('utf-8')
        s_pw = input("使用するパスワード: ").encode('utf-8', 'replace').decode('utf-8')
    
    if s_id and s_pw:
        create_supervisor(s_id, s_pw)
    else:
        print("IDとパスワードをすべて入力してください。")
