"""AutoPOE2 - Tab Cấu Hình Client Game, Input Mode & Launcher (Tab Client)."""

from __future__ import annotations

import os
from typing import Any, Optional
import customtkinter as ctk

from src.assistant_tool import ui_theme as theme


def build_tab_client(
    app: Any,
    scroll: Any,
    detected_mode: str,
    cfg_path: Optional[str],
) -> None:
    """Xây dựng nội dung Tab Client trên scroll container và gán widget vào app."""
    sec_move = app._create_section_label(scroll, "🎮 CHẾ ĐỘ DI CHUYỂN TRONG GAME")
    sec_move.pack(anchor="w", pady=(2, 3))

    move_frame = ctk.CTkFrame(
        scroll,
        fg_color=theme.c("card_bg_alt"),
        border_color=theme.c("muted_btn"),
        border_width=1,
        corner_radius=theme.CARD_CORNER_RADIUS,
    )
    move_frame.pack(fill="x", padx=4, pady=(0, 6))

    badge_frame = ctk.CTkFrame(move_frame, fg_color=theme.c("inset"), corner_radius=4)
    badge_frame.pack(fill="x", padx=6, pady=(4, 2))

    badge_text = (
        "WASD (từ poe2_production_Config.ini)"
        if detected_mode == "wasd"
        else "Click-to-Move (từ game config)"
    )
    badge_color = theme.c("info_cyan") if detected_mode == "wasd" else theme.c("ok")

    app.lbl_move_badge = ctk.CTkLabel(
        badge_frame,
        text=badge_text,
        font=ctk.CTkFont(size=11, weight="bold"),
        text_color=badge_color,
    )
    app.lbl_move_badge.pack(anchor="w", padx=8, pady=(3, 1))

    if cfg_path:
        lbl_file = ctk.CTkLabel(
            badge_frame,
            text=f"  ↳ Tệp: {os.path.basename(cfg_path)} (user_input_mode={detected_mode})",
            font=ctk.CTkFont(size=9),
            text_color=theme.c("text_muted"),
        )
        lbl_file.pack(anchor="w", padx=8, pady=(0, 3))

    app.chk_auto_detect_move = ctk.CTkCheckBox(
        move_frame,
        text="Tự động đồng bộ với tệp cài đặt của game (Khuyên dùng)",
        font=ctk.CTkFont(size=10, weight="bold"),
        text_color=theme.c("text_primary"),
        fg_color=theme.c("start"),
        hover_color=theme.c("ok_hover"),
        command=app._on_auto_detect_toggle,
    )
    app.chk_auto_detect_move.select()
    app.chk_auto_detect_move.pack(anchor="w", padx=10, pady=(3, 2))

    app.var_move_mode = ctk.StringVar(value=detected_mode)

    app.rb_move_wasd = ctk.CTkRadioButton(
        move_frame,
        text="⌨️ Di chuyển bằng Bàn phím (WASD Movement)",
        variable=app.var_move_mode,
        value="wasd",
        font=ctk.CTkFont(size=11, weight="bold"),
        text_color=theme.c("text_primary"),
        fg_color=theme.c("info"),
    )
    app.rb_move_wasd.pack(anchor="w", padx=10, pady=(2, 2))

    app.rb_move_mouse = ctk.CTkRadioButton(
        move_frame,
        text="🖱️ Di chuyển bằng Chuột (Click-to-Move - Mặc định POE)",
        variable=app.var_move_mode,
        value="mouse",
        font=ctk.CTkFont(size=11, weight="bold"),
        text_color=theme.c("text_primary"),
        fg_color=theme.c("info"),
    )
    app.rb_move_mouse.pack(anchor="w", padx=10, pady=(2, 6))

    sec4 = app._create_section_label(
        scroll, "🚀 KHỞI CHẠY CLIENT STANDALONE & LEAGUE MỚI NHẤT"
    )
    sec4.pack(anchor="w", pady=(4, 3))

    login_frame = ctk.CTkFrame(
        scroll,
        fg_color="#0f172a",
        border_color="#334155",
        border_width=1,
        corner_radius=theme.CARD_CORNER_RADIUS,
    )
    login_frame.pack(fill="x", padx=4, pady=(0, 6))

    try:
        from src.assistant_tool.client_launcher import Poe2ClientLauncher
    except ImportError:
        from client_launcher import Poe2ClientLauncher
    default_exe = (
        Poe2ClientLauncher.find_standalone_exe()
        or r"C:\Program Files (x86)\Grinding Gear Games\Path of Exile 2\PathOfExile.exe"
    )

    app.chk_auto_launch = ctk.CTkCheckBox(
        login_frame,
        text="Tự động mở PathOfExile.exe Standalone khi bắt đầu bot",
        font=ctk.CTkFont(size=10, weight="bold"),
        text_color=theme.c("info_cyan"),
        fg_color=theme.c("info"),
    )
    app.chk_auto_launch.deselect()
    app.chk_auto_launch.pack(anchor="w", padx=10, pady=(6, 2))

    exe_frame = ctk.CTkFrame(login_frame, fg_color="transparent")
    exe_frame.pack(fill="x", padx=12, pady=(1, 4))
    lbl_exe = ctk.CTkLabel(
        exe_frame, text="Đường dẫn exe:", font=ctk.CTkFont(size=10), text_color="#cbd5e1"
    )
    lbl_exe.pack(side="left", padx=(0, 4))
    app.ent_exe_path = ctk.CTkEntry(
        exe_frame, width=200, height=22, font=ctk.CTkFont(size=10)
    )
    app.ent_exe_path.insert(0, default_exe)
    app.ent_exe_path.pack(side="left", fill="x", expand=True, padx=(0, 4))

    app.btn_launch_now = ctk.CTkButton(
        exe_frame,
        text="Mở Game Ngay",
        width=80,
        height=22,
        font=ctk.CTkFont(size=10, weight="bold"),
        fg_color="#059669",
        hover_color="#047857",
        command=app._on_launch_game_clicked,
    )
    app.btn_launch_now.pack(side="left")

    league_frame = ctk.CTkFrame(login_frame, fg_color="transparent")
    league_frame.pack(fill="x", padx=12, pady=(1, 3))
    lbl_league = ctk.CTkLabel(
        league_frame,
        text="League Mục Tiêu:",
        font=ctk.CTkFont(size=10),
        text_color="#cbd5e1",
    )
    lbl_league.pack(side="left", padx=(0, 6))
    app.var_league = ctk.StringVar(value="Forbidden Rites (0.5.5 - Mới nhất)")
    app.cmb_league = ctk.CTkComboBox(
        league_frame,
        values=["Forbidden Rites (0.5.5 - Mới nhất)", "Standard"],
        variable=app.var_league,
        width=210,
        height=22,
        font=ctk.CTkFont(size=10),
    )
    app.cmb_league.pack(side="left")

    app.chk_autologin = ctk.CTkCheckBox(
        login_frame,
        text="Tự động kết nối & đăng nhập lại khi rớt mạng (Auto Reconnect)",
        font=ctk.CTkFont(size=11, weight="bold"),
        text_color=theme.c("text_primary"),
        fg_color=theme.c("start"),
        hover_color=theme.c("ok_hover"),
    )
    app.chk_autologin.select()
    app.chk_autologin.pack(anchor="w", padx=10, pady=(4, 2))

    login_delay_row = ctk.CTkFrame(login_frame, fg_color="transparent")
    login_delay_row.pack(fill="x", padx=12, pady=(0, 3))
    app.lbl_login_delay = ctk.CTkLabel(
        login_delay_row,
        text="  ↳ Thời gian chờ trước khi kết nối lại: 5 giây",
        font=ctk.CTkFont(size=10),
        text_color=theme.c("text_muted"),
    )
    app.lbl_login_delay.pack(side="left")
    app.sld_login_delay = ctk.CTkSlider(
        login_delay_row,
        from_=3,
        to=30,
        number_of_steps=27,
        width=130,
        height=12,
        command=app._on_login_delay_change,
    )
    app.sld_login_delay.set(5)
    app.sld_login_delay.pack(side="right", padx=(4, 0))

    slot_frame = ctk.CTkFrame(login_frame, fg_color="transparent")
    slot_frame.pack(fill="x", padx=12, pady=(1, 3))
    lbl_slot = ctk.CTkLabel(
        slot_frame,
        text="Vị trí nhân vật (Slot):",
        font=ctk.CTkFont(size=10),
        text_color="#cbd5e1",
    )
    lbl_slot.pack(side="left", padx=(0, 6))
    app.var_char_slot = ctk.StringVar(value="1")
    app.cmb_char_slot = ctk.CTkComboBox(
        slot_frame,
        values=["1 (Cấp cao nhất / Gần nhất)", "2", "3", "4", "5", "6", "7", "8"],
        variable=app.var_char_slot,
        width=160,
        height=22,
        font=ctk.CTkFont(size=10),
        command=app._on_char_slot_change,
    )
    app.cmb_char_slot.pack(side="left")

    pass_frame = ctk.CTkFrame(login_frame, fg_color="transparent")
    pass_frame.pack(fill="x", padx=12, pady=(1, 4))
    lbl_pass = ctk.CTkLabel(
        pass_frame,
        text="Mật khẩu (Standalone):",
        font=ctk.CTkFont(size=10),
        text_color="#cbd5e1",
    )
    lbl_pass.pack(side="left", padx=(0, 6))
    app.ent_login_pass = ctk.CTkEntry(
        pass_frame,
        placeholder_text="Để trống nếu game đã lưu",
        show="*",
        width=170,
        height=22,
        font=ctk.CTkFont(size=10),
    )
    app.ent_login_pass.pack(side="left")

    app.btn_test_login = ctk.CTkButton(
        login_frame,
        text="⚡ Thử Quy Trình Đăng Nhập (Test Login)",
        font=ctk.CTkFont(size=10, weight="bold"),
        fg_color=theme.c("info"),
        hover_color=theme.c("info_hover"),
        height=22,
        command=app._on_test_login_clicked,
    )
    app.btn_test_login.pack(anchor="w", padx=12, pady=(2, 6))

    sec_visual = app._create_section_label(scroll, "👁️ ZOOM & SƯƠNG MÙ (TOOL RIÊNG)")
    sec_visual.pack(anchor="w", pady=(4, 2))

    visual_card = ctk.CTkFrame(
        scroll,
        fg_color="#182230",
        border_color="#38bdf8",
        border_width=1,
        corner_radius=theme.CARD_CORNER_RADIUS,
    )
    visual_card.pack(fill="x", padx=4, pady=(0, 6))

    ctk.CTkLabel(
        visual_card,
        text="Zoom tối đa 4x và xóa sương mù chạy độc lập với Core (F8).",
        font=ctk.CTkFont(size=10),
        text_color=theme.c("text_muted"),
        wraplength=420,
        justify="left",
    ).pack(anchor="w", padx=10, pady=(6, 2))

    app.btn_visual_tool = ctk.CTkButton(
        visual_card,
        text="Mở Visual Tool",
        font=ctk.CTkFont(size=11, weight="bold"),
        fg_color=theme.c("info"),
        hover_color=theme.c("info_hover"),
        width=140,
        height=24,
        command=app._on_open_visual_tool,
    )
    app.btn_visual_tool.pack(anchor="w", padx=10, pady=(0, 6))
