// Platform subtype (device family) derivation for the trusted platform signal. The
// server records the wrapper kind (vk / telegram / direct) itself, from the validated
// establish path; the client supplies only this device subtype. For VK it is ignored
// server-side (the gateway derives a trusted subtype from the signed vk_platform); for
// Telegram and a direct (web/native) session it is client-reported and best-effort.

import { insideTelegram, telegramPlatform } from './telegram';
import { clientChannel } from './channel';

export type Subtype = 'ios' | 'android' | 'web';

// normalizeSubtype coerces a raw device string (Telegram's WebApp.platform, a
// Capacitor platform, VK's vk_platform, …) to the ios/android/web wire subtype,
// mapping any iPhone/iPad variant to ios and defaulting anything unrecognised —
// desktop, tdesktop, an empty value — to web.
export function normalizeSubtype(raw: string): Subtype {
  const s = raw.toLowerCase();
  if (s.includes('android')) return 'android';
  if (s.includes('iphone') || s.includes('ipad') || s === 'ios') return 'ios';
  return 'web';
}

// platformSubtype reports this client's best-effort device family for the current
// launch: Telegram's reported platform inside a Mini App, otherwise the Capacitor /
// web channel for a direct session. VK does not use it (server-derived from the signed
// launch params).
export function platformSubtype(): Subtype {
  if (insideTelegram()) return normalizeSubtype(telegramPlatform());
  return normalizeSubtype(clientChannel());
}
