import requests
from fastapi import Request
from user_agents import parse


def get_ip(request: Request) -> str:
    x_forwarded_for = request.headers.get("x-forwarded-for")
    if x_forwarded_for:
        return x_forwarded_for.split(",")[0].strip()
    return request.client.host


def get_ipinfo_data(ip: str, token: str = None) -> dict:
    headers = {"Authorization": f"Bearer {token}"} if token else {}
    url = f"https://ipinfo.io/{ip}/json"
    try:
        res = requests.get(url, headers=headers, timeout=5)
        return res.json()
    except Exception as e:
        return {"error": str(e)}


def get_device_info(request: Request) -> dict:
    ua = parse(request.headers.get("user-agent", ""))
    return {
        "os": ua.os.family,
        "os_version": ua.os.version_string,
        "browser": ua.browser.family,
        "browser_version": ua.browser.version_string,
        "device": ua.device.family,
        "is_mobile": ua.is_mobile,
        "is_pc": ua.is_pc,
        "is_tablet": ua.is_tablet,
    }
