import requests
from user_agents import parse


def get_client_ip(request):
    """Get real client IP even behind proxy"""
    x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')

    if x_forwarded_for:
        ip = x_forwarded_for.split(',')[0].strip()
    else:
        ip = request.META.get('REMOTE_ADDR')

    return ip


def get_device_type(request):
    """Detect device type from user agent"""
    user_agent_string = request.META.get('HTTP_USER_AGENT', '')
    parsed = parse(user_agent_string)

    if parsed.is_mobile:
        return "Mobile"
    elif parsed.is_tablet:
        return "Tablet"
    elif parsed.is_pc:
        return "System"
    else:
        return "Unknown"


def get_location(ip):
    """Get location from IP"""
    try:
        res = requests.get(
            f"http://ip-api.com/json/{ip}?fields=status,city,country",
            timeout=3
        )

        data = res.json()

        if data.get("status") == "success":
            city = data.get("city", "")
            country = data.get("country", "")
            return f"{city}, {country}"

        return "Unknown"

    except requests.RequestException:
        return "Unknown"

def get_city_from_coords(lat, lon):
    try:
        url = f"https://nominatim.openstreetmap.org/reverse?lat={lat}&lon={lon}&format=json"

        res = requests.get(url, headers={"User-Agent": "recruiter-app"})
        data = res.json()

        address = data.get("address", {})

        city = (
            address.get("city")
            or address.get("town")
            or address.get("village")
            or address.get("county")
        )

        state = address.get("state")
        country = address.get("country")

        return f"{city}, {state}, {country}"

    except:
        return "Unknown"
