// Předplatné — zdarma (2 úkoly na kategorii) vs. Premium (vše odemčeno).
// Admin má automaticky premium.

const FREE_TIER_LEVELS_PER_CATEGORY = 2;

function readSubFromLocal() {
  try {
    const raw = localStorage.getItem('pandicka-subscription');
    return raw ? JSON.parse(raw) : { tier: 'free', expiresAt: null };
  } catch { return { tier: 'free', expiresAt: null }; }
}

function writeSubToLocal(sub) {
  try { localStorage.setItem('pandicka-subscription', JSON.stringify(sub)); } catch {}
}

async function loadSubscription(user) {
  // Admin e-mail → vždy premium, bez ohledu na Firestore
  if (user?.email && typeof isAdminEmail === 'function' && isAdminEmail(user.email)) {
    return { tier: 'premium', expiresAt: null, role: 'admin' };
  }
  if (typeof isFirebaseReady === 'function' && isFirebaseReady() && user?.uid) {
    try {
      const snap = await window.firebase.firestore().collection('users').doc(user.uid).get();
      const data = snap.data() || {};
      const role = data.role || 'parent';
      if (role === 'admin') return { tier: 'premium', expiresAt: null, role };
      return {
        tier: data.subscription || 'free',
        expiresAt: data.subscriptionExpiresAt || null,
        role,
      };
    } catch {}
  }
  return readSubFromLocal();
}

function isSubscriptionActive(sub) {
  if (!sub) return false;
  if (sub.tier !== 'premium') return false;
  if (sub.expiresAt) {
    const t = typeof sub.expiresAt === 'string' ? new Date(sub.expiresAt) : sub.expiresAt;
    if (t && t < new Date()) return false;
  }
  return true;
}

function isPremium(sub) { return isSubscriptionActive(sub); }
function isAdminRole(sub) { return sub?.role === 'admin'; }

function maxUnlockedLevels(sub, totalInCat) {
  if (isPremium(sub)) return totalInCat;
  return Math.min(FREE_TIER_LEVELS_PER_CATEGORY, totalInCat);
}

// Pro paywall — klientský state (server-side „upgrade" je zatím mock).
async function mockUpgradeToPremium(user) {
  const next = { tier: 'premium', expiresAt: null, role: 'parent' };
  writeSubToLocal(next);
  if (isFirebaseReady() && user?.uid) {
    try {
      await window.firebase.firestore().collection('users').doc(user.uid).set(
        { subscription: 'premium', subscriptionExpiresAt: null,
          upgradedAt: window.firebase.firestore.FieldValue.serverTimestamp() },
        { merge: true },
      );
    } catch {}
  }
  return next;
}

Object.assign(window, {
  FREE_TIER_LEVELS_PER_CATEGORY,
  loadSubscription, isSubscriptionActive, isPremium, isAdminRole,
  maxUnlockedLevels, mockUpgradeToPremium,
});
