import sys
import os
from unittest.mock import MagicMock

if "pytest" in sys.modules:
    import pytest

    pytest.skip("manual script not intended for pytest collection", allow_module_level=True)

# --- Mock Kodi modules before importing lib ---
mock_xbmc = MagicMock()
mock_xbmc.LOGINFO = 1
mock_xbmc.LOGERROR = 3
sys.modules["xbmc"] = mock_xbmc

mock_xbmcgui = MagicMock()
sys.modules["xbmcgui"] = mock_xbmcgui

mock_xbmcaddon = MagicMock()
sys.modules["xbmcaddon"] = mock_xbmcaddon

# --- Mock sqlite3 to avoid DB initialization errors ---
import sqlite3

sqlite3.connect = MagicMock(return_value=MagicMock())

mock_xbmcplugin = MagicMock()
sys.modules["xbmcplugin"] = mock_xbmcplugin

mock_xbmcvfs = MagicMock()
mock_xbmcvfs.translatePath.return_value = ":memory:"
sys.modules["xbmcvfs"] = mock_xbmcvfs

# --- Mock kodi utils ---
mock_kodi_utils = MagicMock()
mock_kodi_utils.dialog_text = lambda title, body: print(
    f"\n[DIALOG: {title}]\n{body}\n"
)
mock_kodi_utils.kodilog = lambda msg, level=1: print(f"[LOG] {msg}")
sys.modules["lib.utils.kodi.utils"] = mock_kodi_utils

# Add project root to path
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))


def mock_notification(msg):
    print(f"[NOTIFICATION] {msg}")


# Now we can import our client
try:
    from lib.clients.easynews import Easynews
except ImportError as e:
    print(f"Error importing Easynews: {e}")
    sys.exit(1)


def main():
    print("=== Easynews Manual Test Script ===")
    user = input("Enter Easynews Username: ").strip()
    password = input("Enter Easynews Password: ").strip()

    if not user or not password:
        print("Username and Password are required.")
        return

    # Initialize client
    client = Easynews(user, password, timeout=20, notification=mock_notification)

    print("\n--- Testing Account Info (get_info) ---")
    try:
        client.get_info()
    except Exception as e:
        print(f"Error during get_info: {e}")

    print("\n--- Testing Search (Query: 'Firebreak') ---")
    try:
        results = client.search("Firebreak", mode="movie", media_type="movie")
        print(f"Found {len(results)} results.")
        for i, res in enumerate(results[:5]):
            print(f"{i+1}. {res.title} ({res.quality}) - {res.size // (1024*1024)} MB")
            print(f"   URL: {res.url[:80]}...")

            if i == 0:
                print("\n--- Testing URL Resolve (First Result) ---")
                resolved = client.resolve_url(res.url)
                print(f"Resolved URL: {resolved}")
    except Exception as e:
        print(f"Error during search: {e}")


if __name__ == "__main__":
    main()
