"""Пути панели — Python-разработка и собранный .exe на рабочем столе."""

from __future__ import annotations

import os
import sys
from pathlib import Path

EXE_NAME = "AXON Dump Radar.exe"


def is_frozen_app() -> bool:
    return bool(getattr(sys, "frozen", False))


def get_panel_data_dir() -> Path:
    """Куда писать panel_config.json (IP сервера, пароль)."""
    if is_frozen_app():
        data = Path(os.environ.get("APPDATA", str(Path.home()))) / "AXON-Dump-Radar"
    else:
        data = Path(__file__).resolve().parent
    data.mkdir(parents=True, exist_ok=True)
    return data


def get_panel_install_dir() -> Path:
    """Постоянная папка приложения (onedir после обновления через zip)."""
    install = get_panel_data_dir() / "app"
    install.mkdir(parents=True, exist_ok=True)
    return install


def get_panel_runtime_dir() -> Path:
    """Откуда читать UI (в .exe — _internal PyInstaller или dev-папка)."""
    if is_frozen_app():
        meipass = getattr(sys, "_MEIPASS", None)
        if meipass:
            return Path(meipass)
        return Path(sys.executable).resolve().parent
    return Path(__file__).resolve().parent


def get_installed_exe_path() -> Path | None:
    if not is_frozen_app():
        return None
    return Path(sys.executable).resolve()


def get_panel_launch_exe() -> Path | None:
    """Exe для перезапуска после обновления (приоритет — установка в AppData)."""
    install_exe = get_panel_install_dir() / EXE_NAME
    if install_exe.exists():
        return install_exe.resolve()
    return get_installed_exe_path()


def get_assets_dir() -> Path:
    return get_panel_runtime_dir() / "assets"


def get_icon_ico_path() -> Path:
    return get_assets_dir() / "axon.ico"


def get_tray_icon_path() -> Path:
    assets = get_assets_dir()
    tray = assets / "tray-icon.png"
    if tray.exists():
        return tray
    return assets / "axon.png"


def is_onedir_install(install_dir: Path) -> bool:
    return (install_dir / EXE_NAME).is_file() and (install_dir / "_internal").is_dir()


def is_running_onefile() -> bool:
    if not is_frozen_app():
        return False
    return not (Path(sys.executable).resolve().parent / "_internal").is_dir()


def redirect_to_app_install_if_needed() -> bool:
    """Старый onefile (рабочий стол) → запуск onedir из AppData."""
    if not is_running_onefile():
        return False
    install_dir = get_panel_install_dir()
    install_exe = install_dir / EXE_NAME
    if not is_onedir_install(install_dir):
        return False
    if Path(sys.executable).resolve() == install_exe.resolve():
        return False
    import subprocess

    subprocess.Popen(
        [str(install_exe)],
        cwd=str(install_dir),
        creationflags=subprocess.CREATE_NO_WINDOW if sys.platform == "win32" else 0,
        close_fds=True,
    )
    return True


def get_config_path() -> Path:
    return get_panel_data_dir() / "panel_config.json"
