# -*- coding: utf-8 -*-
"""
shorts_ai_api.py 에 추가할 관리자 MYBOX 세션 엔드포인트 패치입니다.

붙여넣기 위치:
- naver_session_storage_path() 함수 아래 또는 /naver-auto-login 라우트 근처
- app.run(...) 위쪽

역할:
- /mybox-session-check
- /mybox-login

관리자 MYBOX는 중개사별 세션이 아니라 단일 관리자 세션을 사용합니다.
저장 파일:
storage/naver_sessions/naver_session_admin_mybox.json
"""

def mybox_admin_session_storage_path():
    session_dir = os.path.join(STORAGE_DIR, "naver_sessions")
    os.makedirs(session_dir, exist_ok=True)
    return os.path.join(session_dir, "naver_session_admin_mybox.json")


@app.route("/mybox-session-check", methods=["POST"])
def mybox_session_check():
    if not check_api_key(request):
        return unauthorized_response()

    storage_file = mybox_admin_session_storage_path()

    if not os.path.exists(storage_file):
        return jsonify({
            "ok": True,
            "linked": False,
            "session_status": "not_linked",
            "message": "관리자 MYBOX 세션 파일이 없습니다.",
            "storage_file": storage_file.replace("\\", "/")
        })

    try:
        file_size = os.path.getsize(storage_file)
        modified_at = time.strftime(
            "%Y-%m-%d %H:%M:%S",
            time.localtime(os.path.getmtime(storage_file))
        )

        valid_json = False
        cookie_count = 0

        with open(storage_file, "r", encoding="utf-8") as f:
            data = json.load(f)
            valid_json = isinstance(data, dict)
            cookie_count = len(data.get("cookies", [])) if isinstance(data, dict) else 0

        return jsonify({
            "ok": True,
            "linked": valid_json and cookie_count > 0,
            "session_status": "linked" if valid_json and cookie_count > 0 else "error",
            "message": "관리자 MYBOX 세션 파일 확인 완료",
            "storage_file": storage_file.replace("\\", "/"),
            "file_size": file_size,
            "modified_at": modified_at,
            "cookie_count": cookie_count
        })

    except Exception as e:
        return jsonify({
            "ok": False,
            "linked": False,
            "session_status": "error",
            "message": str(e),
            "storage_file": storage_file.replace("\\", "/")
        }), 500


@app.route("/mybox-login", methods=["POST"])
def mybox_login():
    if not check_api_key(request):
        return unauthorized_response()

    data = request.get_json(silent=True) or {}
    admin_naver_id = str(data.get("admin_naver_id") or "").strip()

    if not admin_naver_id:
        return jsonify({
            "ok": False,
            "message": "admin_naver_id required"
        }), 400

    storage_file = mybox_admin_session_storage_path()

    try:
        with sync_playwright() as p:
            browser = p.chromium.launch(
                headless=False,
                args=[
                    "--disable-blink-features=AutomationControlled",
                    "--no-sandbox",
                ]
            )

            context = browser.new_context(
                locale="ko-KR",
                viewport={"width": 1280, "height": 900}
            )
            page = context.new_page()

            # MYBOX로 바로 이동하면 로그인 후 다시 MYBOX로 돌아오기 쉽습니다.
            page.goto("https://mybox.naver.com/", wait_until="domcontentloaded", timeout=60000)
            page.wait_for_timeout(1500)

            login_success = False
            last_url = ""

            # 관리자가 열린 브라우저에서 직접 로그인합니다.
            # 2단계 인증/새 기기 인증이 있어도 수동으로 처리할 수 있게 충분히 기다립니다.
            for _ in range(600):
                page.wait_for_timeout(1000)
                last_url = page.url

                try:
                    cookies = context.cookies()
                    naver_cookie_names = [
                        c.get("name", "")
                        for c in cookies
                        if "naver.com" in c.get("domain", "")
                    ]

                    if "NID_AUT" in naver_cookie_names or "NID_SES" in naver_cookie_names:
                        login_success = True
                        break
                except Exception:
                    pass

            if not login_success:
                browser.close()
                return jsonify({
                    "ok": False,
                    "message": "관리자 네이버 로그인 시간 초과",
                    "last_url": last_url
                }), 500

            # MYBOX 접근 확인
            try:
                page.goto("https://mybox.naver.com/", wait_until="domcontentloaded", timeout=60000)
                page.wait_for_timeout(3000)
            except Exception:
                pass

            context.storage_state(path=storage_file)
            browser.close()

        return jsonify({
            "ok": True,
            "message": "관리자 MYBOX 세션 저장 완료",
            "admin_naver_id": admin_naver_id,
            "storage_file": storage_file.replace("\\", "/")
        })

    except Exception as e:
        return jsonify({
            "ok": False,
            "message": str(e)
        }), 500
