import hashlib


DEVICE_COOKIE_NAME = 'avighna_device_id'
DEVICE_COOKIE_DAYS = 365


def get_device_fingerprint(request):
    """
    Generate a device fingerprint from browser headers.
    Not perfect — but good enough for most device changes.
    """
    ua  = request.META.get('HTTP_USER_AGENT', '')
    lang= request.META.get('HTTP_ACCEPT_LANGUAGE', '')
    enc = request.META.get('HTTP_ACCEPT_ENCODING', '')

    raw = f"{ua}|{lang}|{enc}"
    return hashlib.sha256(raw.encode()).hexdigest()


def get_device_label(request):
    """
    Human-readable device label from User-Agent.
    """
    ua = request.META.get('HTTP_USER_AGENT', '').lower()

    # Browser
    if 'chrome' in ua and 'edg' not in ua:
        browser = 'Chrome'
    elif 'firefox' in ua:
        browser = 'Firefox'
    elif 'safari' in ua and 'chrome' not in ua:
        browser = 'Safari'
    elif 'edg' in ua:
        browser = 'Edge'
    else:
        browser = 'Browser'

    # OS
    if 'windows' in ua:
        os_name = 'Windows'
    elif 'android' in ua:
        os_name = 'Android'
    elif 'iphone' in ua or 'ipad' in ua:
        os_name = 'iOS'
    elif 'mac' in ua:
        os_name = 'macOS'
    elif 'linux' in ua:
        os_name = 'Linux'
    else:
        os_name = 'Unknown OS'

    return f"{browser} on {os_name}"


def set_device_cookie(response, device_id):
    """
    Save device_id in a long-lived cookie.
    """
    response.set_cookie(
        DEVICE_COOKIE_NAME,
        device_id,
        max_age = DEVICE_COOKIE_DAYS * 24 * 60 * 60,
        httponly= True,
        samesite= 'Lax',
    )
    return response


def get_device_id_from_cookie(request):
    """
    Read device_id from cookie (set on previous trusted login).
    """
    return request.COOKIES.get(DEVICE_COOKIE_NAME, '')
