import os
import sys
import time
from pathlib import Path

import tempfile
os.environ["CMS_DATABASE_URL"] = "sqlite://"
os.environ["CMS_DATA_DIR"] = tempfile.mkdtemp(prefix="cms-unit-")
os.environ["CMS_LOGIN_RATE_PER_MIN"] = "1000"
ROOT = Path(__file__).resolve().parent.parent
sys.path.insert(0, str(ROOT / "backend"))
sys.path.insert(0, str(ROOT / "client-agent"))

import pytest  # noqa: E402
from fastapi.testclient import TestClient  # noqa: E402

from app.api import auth as auth_mod  # noqa: E402
from app.main import app  # noqa: E402

ADMIN = {"username": "admin", "password": "Rahasia123"}


@pytest.fixture(scope="session")
def client():
    with TestClient(app) as c:
        code = auth_mod.SETUP_FILE.read_text().strip()
        r = c.post("/api/setup", json={"setup_code": code, "username": "admin", "full_name": "Admin Utama", "password": ADMIN["password"],
                                       "school_name": "SMA Uji"})
        assert r.status_code == 200, r.text
        c.admin_token = r.json()["access_token"]
        yield c


def H(tok):
    return {"Authorization": f"Bearer {tok}"}


@pytest.fixture(scope="session")
def admin(client):
    return H(client.admin_token)


@pytest.fixture(scope="session")
def enroll_key(client, admin):
    return client.get("/api/enrollment", headers=admin).json()["enrollment_key"]


def register_agent(client, key, uid="aaaaaaaa-0001", host="PC-01"):
    r = client.post("/api/agent/register", json={"enrollment_key": key, "device_uid": uid, "hostname": host, "ip_address": "192.168.1.11",
                                                  "mac_address": "AA:BB:CC:DD:EE:01", "os_name": "Windows 11 Pro", "windows_user": "murid01",
                                                  "agent_version": "1.0.0"})
    assert r.status_code == 200, r.text
    return r.json()
