"""Shared fixtures for RBS Regal backend API tests."""
import os
import pytest
import requests

BASE_URL = os.environ.get("REACT_APP_BACKEND_URL", "https://offline-billing-pro-2.preview.emergentagent.com").rstrip("/")
ADMIN_EMAIL = os.environ.get("TEST_ADMIN_EMAIL", "regalmarketing2024@gmail.com")
ADMIN_PASSWORD = os.environ.get("TEST_ADMIN_PASSWORD", "Rvasa@#9955")
STAFF_EMAIL = os.environ.get("TEST_STAFF_EMAIL", "staff@rmregal.com")
STAFF_PASSWORD = os.environ.get("TEST_STAFF_PASSWORD", "Staff@123")


def _new_session():
    s = requests.Session()
    s.headers.update({"Content-Type": "application/json"})
    return s


def _login(session, email, password):
    r = session.post(f"{BASE_URL}/api/auth/login", json={"email": email, "password": password}, timeout=30)
    return r


@pytest.fixture(scope="session")
def base_url():
    return BASE_URL


@pytest.fixture(scope="session")
def admin_session():
    s = _new_session()
    r = _login(s, ADMIN_EMAIL, ADMIN_PASSWORD)
    if r.status_code != 200:
        pytest.skip(f"Admin login failed: {r.status_code} {r.text}")
    return s


@pytest.fixture(scope="session")
def staff_session():
    s = _new_session()
    r = _login(s, STAFF_EMAIL, STAFF_PASSWORD)
    if r.status_code != 200:
        pytest.skip(f"Staff login failed: {r.status_code} {r.text}")
    return s


@pytest.fixture(scope="session")
def default_company_id(admin_session):
    r = admin_session.get(f"{BASE_URL}/api/companies", timeout=30)
    assert r.status_code == 200, r.text
    companies = r.json()
    assert len(companies) >= 1, "Default company should be seeded"
    # Prefer RBS Regal Traders
    for c in companies:
        if "RBS Regal" in c.get("name", ""):
            return c["id"]
    return companies[0]["id"]
