import type { NamiEntitlement, NamiPurchase, NamiSKUType } from './types';
import { NamiPaywallAction } from './types';

export function parsePurchaseDates(purchase: any): NamiPurchase {
  return {
    ...purchase,
    purchaseInitiatedTimestamp: new Date(purchase.purchaseInitiatedTimestamp),
    expires: purchase.expires ? new Date(purchase.expires) : undefined,
  };
}

const validSkuTypes: NamiSKUType[] = [
  'unknown',
  'one_time_purchase',
  'subscription',
];

export function coerceSkuType(raw: string): NamiSKUType {
  return validSkuTypes.includes(raw as NamiSKUType)
    ? (raw as NamiSKUType)
    : 'unknown';
}

const validPaywallActions = new Set(
  Object.values(NamiPaywallAction) as NamiPaywallAction[],
);

export function mapToNamiPaywallAction(action: string): NamiPaywallAction {
  return validPaywallActions.has(action as NamiPaywallAction)
    ? (action as NamiPaywallAction)
    : NamiPaywallAction.UNKNOWN;
}

export function parseEntitlements(entitlements: any[]): NamiEntitlement[] {
  return entitlements.map((ent) => ({
    ...ent,
    activePurchases: ent.activePurchases.map(parsePurchaseDates),
    relatedSkus: ent.relatedSkus ?? [],
    purchasedSkus: ent.purchasedSkus ?? [],
  }));
}
