export function getDeviceFingerprint(): string {
  if (typeof window === 'undefined') return 'server';
  const key = 'lendry_device_fingerprint';
  const existing = window.localStorage.getItem(key);
  if (existing) return existing;
  const value = crypto.randomUUID();
  window.localStorage.setItem(key, value);
  return value;
}

export function resolveDeviceType(): string {
  if (typeof navigator === 'undefined') return 'WEB';
  const ua = navigator.userAgent;
  if (/Android/i.test(ua)) return 'ANDROID';
  if (/iPhone|iPad|iPod/i.test(ua)) return 'IOS';
  if (/Windows/i.test(ua)) return 'DESKTOP';
  if (/Mac OS X/i.test(ua)) return 'DESKTOP';
  return 'WEB';
}

export function resolveDeviceLabel(): string {
  if (typeof navigator === 'undefined') return 'Browser';
  const ua = navigator.userAgent;

  const browser = (() => {
    if (/Edg\//i.test(ua)) return 'Microsoft Edge';
    if (/YaBrowser/i.test(ua)) return 'Яндекс Браузер';
    if (/Firefox\//i.test(ua)) return 'Firefox';
    if (/CriOS/i.test(ua)) return 'Chrome';
    if (/Chrome\//i.test(ua) && !/Edg\//i.test(ua)) return 'Chrome';
    if (/Safari/i.test(ua) && !/Chrome/i.test(ua)) return 'Safari';
    return 'Браузер';
  })();

  const os = (() => {
    if (/Windows NT/i.test(ua)) return 'Windows';
    if (/Android/i.test(ua)) return 'Android';
    if (/iPhone/i.test(ua)) return 'iPhone';
    if (/iPad/i.test(ua)) return 'iPad';
    if (/Mac OS X/i.test(ua)) return 'macOS';
    if (/Linux/i.test(ua)) return 'Linux';
    return 'Устройство';
  })();

  return `${browser} · ${os}`;
}

export function buildAuthDevicePayload() {
  return {
    fingerprint: getDeviceFingerprint(),
    deviceName: resolveDeviceLabel(),
    deviceType: resolveDeviceType()
  };
}

export function formatUserAgentLabel(userAgent?: string | null): string | null {
  if (!userAgent?.trim()) return null;
  const ua = userAgent.trim();

  const browser = (() => {
    if (/Edg\//i.test(ua)) return 'Microsoft Edge';
    if (/YaBrowser/i.test(ua)) return 'Яндекс Браузер';
    if (/Firefox\//i.test(ua)) return 'Firefox';
    if (/Chrome\//i.test(ua) && !/Edg\//i.test(ua)) return 'Chrome';
    if (/Safari/i.test(ua) && !/Chrome/i.test(ua)) return 'Safari';
    return null;
  })();

  const os = (() => {
    if (/Windows NT/i.test(ua)) return 'Windows';
    if (/Android/i.test(ua)) return 'Android';
    if (/iPhone/i.test(ua)) return 'iPhone';
    if (/iPad/i.test(ua)) return 'iPad';
    if (/Mac OS X/i.test(ua)) return 'macOS';
    if (/Linux/i.test(ua)) return 'Linux';
    return null;
  })();

  if (browser && os) return `${browser} · ${os}`;
  return browser ?? os;
}
