/**
 * Tier card data + rank helpers — upgrade-upsell-modal (spec 36).
 *
 * Structural data for the three self-service tier cards displayed in the
 * upgrade modal. White Label is intentionally absent (partner arrangement,
 * not self-service). Human-readable labels are resolved via i18n at render
 * time; this file holds tier, price, and feature availability flags.
 */
import { TenantTier } from '@zync/types'

export interface TierFeatureLine {
  /** i18n key under `upgrade-modal.features.*` resolving to a Hebrew label */
  labelKey: string
  /** true = ✓ available, false = — unavailable */
  available: boolean
  /** visual differentiator vs the tier below; drives accent border highlight */
  highlight?: boolean
}

export interface TierCardData {
  tier: TenantTier
  /** Brand name — not translated (Freelancer / Business / Enterprise) */
  displayName: string
  price: {
    /** ILS per month on monthly billing; 0 = free; null = contact only */
    monthly: number | null
    /** ILS per month on annual billing; 0 = free; null = contact/free */
    annual: number | null
    /** Total charged across 10 payments (annual); null if not applicable */
    annualBilledAs: number | null
  }
  recommended: boolean
  features: TierFeatureLine[]
}

export const TIER_CARDS: TierCardData[] = [
  {
    tier: TenantTier.FREELANCER,
    displayName: 'Freelancer',
    price: { monthly: 0, annual: 0, annualBilledAs: null },
    recommended: false,
    features: [
      { labelKey: 'features.team_1',           available: true },
      { labelKey: 'features.modules_basic',    available: true },
      { labelKey: 'features.storage_1gb',      available: true },
      { labelKey: 'features.ai',               available: false },
      { labelKey: 'features.white_label',      available: false },
      { labelKey: 'features.custom_domain',    available: false },
      { labelKey: 'features.api',              available: false },
      { labelKey: 'features.support_community', available: true, highlight: false },
    ],
  },
  {
    tier: TenantTier.BUSINESS,
    displayName: 'Business',
    price: { monthly: 89, annual: 74, annualBilledAs: 740 },
    recommended: true,
    features: [
      { labelKey: 'features.team_8',            available: true,  highlight: true },
      { labelKey: 'features.modules_all',       available: true,  highlight: true },
      { labelKey: 'features.storage_20gb',      available: true,  highlight: true },
      { labelKey: 'features.ai',                available: true,  highlight: true },
      { labelKey: 'features.white_label',       available: false },
      { labelKey: 'features.custom_domain',     available: false },
      { labelKey: 'features.api',               available: false },
      { labelKey: 'features.support_email48',   available: true,  highlight: true },
    ],
  },
  {
    tier: TenantTier.ENTERPRISE,
    displayName: 'Enterprise',
    price: { monthly: null, annual: null, annualBilledAs: null },
    recommended: false,
    features: [
      { labelKey: 'features.team_15',           available: true,  highlight: true },
      { labelKey: 'features.modules_all',       available: true },
      { labelKey: 'features.storage_100gb',     available: true,  highlight: true },
      { labelKey: 'features.ai',                available: true },
      { labelKey: 'features.white_label',       available: true,  highlight: true },
      { labelKey: 'features.custom_domain',     available: true,  highlight: true },
      { labelKey: 'features.api',               available: true,  highlight: true },
      { labelKey: 'features.support_priority4', available: true,  highlight: true },
    ],
  },
]

/** Tier ordering used by CTA logic and nextTierAbove. */
export const TIER_RANK: Record<TenantTier, number> = {
  [TenantTier.FREELANCER]:  0,
  [TenantTier.BUSINESS]:    1,
  [TenantTier.ENTERPRISE]:  2,
  [TenantTier.WHITE_LABEL]: 3,
}

export function tierRank(t: TenantTier): number {
  return TIER_RANK[t]
}

/**
 * Returns the next purchasable tier above the current one.
 * Used to default-select the most relevant upgrade card when the modal opens
 * without an explicit `targetTier`.
 */
export function nextTierAbove(current: TenantTier): TenantTier {
  if (current === TenantTier.FREELANCER) return TenantTier.BUSINESS
  if (current === TenantTier.BUSINESS)   return TenantTier.ENTERPRISE
  // Already at Enterprise or White Label — keep Enterprise as ceiling card.
  return TenantTier.ENTERPRISE
}
