// lineup-data.jsx — Mock data: roster, decks, deck-score formula, i18n strings.

// ─── i18n ───────────────────────────────────────────────────────────────────
const LU_I18N = {
  fa: {
    title: 'چیدمان تیم',
    subtitle: 'ساختار ثابت · ۵ کارت',
    pos: { GK: 'دروازه‌بان', DEF: 'دفاع', MID: 'هافبک', FWD: 'مهاجم' },
    posShort: { GK: 'GK', DEF: 'DEF', MID: 'MID', FWD: 'FWD' },
    emptyCta: 'انتخاب',
    add: 'افزودن',
    swap: 'تعویض',
    remove: 'حذف',
    fanSlot: 'کارت هواداری',
    coachSlot: 'کارت مربی',
    fanEmpty: 'اختیاری',
    coachEmpty: 'اختیاری',
    baseScore: 'امتیاز پایه',
    bonus: 'بنوس',
    multiplier: 'ضریب',
    finalScore: 'امتیاز نهایی',
    xpEstimate: 'تخمین XP',
    submit: 'ثبت چیدمان',
    submitReady: 'آماده برای ثبت',
    submitWaiting: 'منتظر تکمیل ۵ کارت',
    submitCooldown: 'Free Submit در حال آماده‌سازی',
    submitNext: 'تا Submit بعدی',
    invalidPosition: 'پوزیشن نادرست',
    selectCard: 'انتخاب کارت',
    cardPicker: 'انتخاب از مجموعه',
    available: 'موجود',
    locked: 'رزرو شده',
    expired: 'منقضی',
    all: 'همه',
    deadline: 'مهلت ثبت',
    eventName: 'هفته‌ی ۲۸ · لیگ برتر',
    formation: 'ساختار',
    free: 'رایگان',
    sponsoredBy: 'با حمایت',
    sponsorCta: 'بیشتر بدانید',
    units: { h: 'س', m: 'د', s: 'ث' },
  },
  en: {
    title: 'Lineup',
    subtitle: 'Fixed formation · 5 cards',
    pos: { GK: 'Goalkeeper', DEF: 'Defender', MID: 'Midfielder', FWD: 'Forward' },
    posShort: { GK: 'GK', DEF: 'DEF', MID: 'MID', FWD: 'FWD' },
    emptyCta: 'Pick',
    add: 'Add',
    swap: 'Swap',
    remove: 'Remove',
    fanSlot: 'Fan Card',
    coachSlot: 'Coach Card',
    fanEmpty: 'Optional',
    coachEmpty: 'Optional',
    baseScore: 'Base',
    bonus: 'Bonus',
    multiplier: 'Multiplier',
    finalScore: 'Final Score',
    xpEstimate: 'XP est.',
    submit: 'Submit Lineup',
    submitReady: 'Ready to submit',
    submitWaiting: 'Fill all 5 slots',
    submitCooldown: 'Free Submit recharging',
    submitNext: 'Next submit in',
    invalidPosition: 'Wrong position',
    selectCard: 'Select card',
    cardPicker: 'Pick from collection',
    available: 'Available',
    locked: 'Reserved',
    expired: 'Expired',
    all: 'All',
    deadline: 'Deadline',
    eventName: 'Matchweek 28 · League',
    formation: 'Formation',
    free: 'Free',
    sponsoredBy: 'Sponsored by',
    sponsorCta: 'Learn more',
    units: { h: 'h', m: 'm', s: 's' },
  },
  ar: {
    title: 'التشكيلة',
    subtitle: 'تشكيل ثابت · ٥ بطاقات',
    pos: { GK: 'حارس', DEF: 'مدافع', MID: 'وسط', FWD: 'مهاجم' },
    posShort: { GK: 'GK', DEF: 'DEF', MID: 'MID', FWD: 'FWD' },
    emptyCta: 'اختر',
    add: 'إضافة',
    swap: 'تبديل',
    remove: 'إزالة',
    fanSlot: 'بطاقة مشجع',
    coachSlot: 'بطاقة مدرب',
    fanEmpty: 'اختياري',
    coachEmpty: 'اختياري',
    baseScore: 'النقاط الأساسية',
    bonus: 'مكافأة',
    multiplier: 'مضاعف',
    finalScore: 'النتيجة النهائية',
    xpEstimate: 'XP',
    submit: 'تأكيد التشكيلة',
    submitReady: 'جاهز للتأكيد',
    submitWaiting: 'أكمل ٥ بطاقات',
    submitCooldown: 'Free Submit قيد التحضير',
    submitNext: 'التالي بعد',
    invalidPosition: 'مركز خاطئ',
    selectCard: 'اختر بطاقة',
    cardPicker: 'من المجموعة',
    available: 'متاح',
    locked: 'محجوز',
    expired: 'منتهي',
    all: 'الكل',
    deadline: 'الموعد النهائي',
    eventName: 'الأسبوع ٢٨ · الدوري',
    formation: 'التشكيل',
    free: 'مجاني',
    sponsoredBy: 'برعاية',
    sponsorCta: 'اعرف المزيد',
    units: { h: 'س', m: 'د', s: 'ث' },
  },
};

// ─── mock collection (lots of players for picker) ───────────────────────────
// Each entry has a tier, position, overall, stat, and localized name/team.
// Images cycle from the 3 webp assets we have — they're placeholders.
const PLAYER_IMAGES = ['assets/mes.webp', 'assets/c7.webp', 'assets/azmoon.webp'];

function mkPlayer(id, position, tier, overall, statKey, statValue, nameFa, nameEn, nameAr, teamFa, teamEn, teamAr, imgIdx, status) {
  return {
    id, position, tier, overall, statKey, statValue,
    name: { fa: nameFa, en: nameEn, ar: nameAr },
    team: { fa: teamFa, en: teamEn, ar: teamAr },
    image: PLAYER_IMAGES[imgIdx % 3],
    status: status || 'available',
  };
}

const COLLECTION = [
  // GK (~8)
  mkPlayer('gk1', 'GK',  'silver',   75, 'GK', 78, 'بیرانوند', 'Beiranvand', 'بيرانوند', 'ایران', 'Iran', 'إيران', 2),
  mkPlayer('gk2', 'GK',  'gold',     86, 'GK', 89, 'علیسون',   'Alisson',    'أليسون',   'برزیل', 'Brazil', 'البرازيل', 1),
  mkPlayer('gk3', 'GK',  'platinum', 92, 'GK', 94, 'کورتوآ',   'Courtois',   'كورتوا',   'بلژیک', 'Belgium', 'بلجيكا', 0),
  mkPlayer('gk4', 'GK',  'bronze',   66, 'GK', 70, 'حسینی',    'Hosseini',   'حسيني',    'ایران', 'Iran', 'إيران', 2),
  mkPlayer('gk5', 'GK',  'silver',   78, 'GK', 80, 'لیوریس',   'Lloris',     'يوريس',    'فرانسه', 'France', 'فرنسا', 0, 'locked'),

  // DEF (~12)
  mkPlayer('df1', 'DEF', 'gold',     85, 'DEF', 88, 'وندایک',  'Van Dijk',   'فان دايك', 'هلند',  'Netherlands', 'هولندا', 1),
  mkPlayer('df2', 'DEF', 'gold',     86, 'DEF', 87, 'دیاس',    'Dias',       'دياز',     'پرتغال', 'Portugal', 'البرتغال', 1),
  mkPlayer('df3', 'DEF', 'platinum', 91, 'DEF', 93, 'مارکینیوس', 'Marquinhos', 'مارکينيوس', 'برزیل', 'Brazil', 'البرازيل', 1),
  mkPlayer('df4', 'DEF', 'silver',   73, 'DEF', 76, 'حسینی',   'Hosseini',   'حسيني',    'ایران', 'Iran', 'إيران', 2),
  mkPlayer('df5', 'DEF', 'bronze',   67, 'DEF', 70, 'محرمی',   'Moharrami',  'محرمي',    'ایران', 'Iran', 'إيران', 2),
  mkPlayer('df6', 'DEF', 'silver',   78, 'DEF', 80, 'کیمیش',   'Kimmich',    'كيميش',    'آلمان', 'Germany', 'ألمانيا', 0),
  mkPlayer('df7', 'DEF', 'gold',     84, 'DEF', 86, 'ساندرو',  'Sandro',     'ساندرو',   'برزیل', 'Brazil', 'البرازيل', 0),
  mkPlayer('df8', 'DEF', 'gold',     82, 'DEF', 85, 'هرناندز', 'Hernandez',  'هرنانديز', 'فرانسه', 'France', 'فرنسا', 1, 'locked'),

  // MID (~10)
  mkPlayer('mf1', 'MID', 'platinum', 92, 'MID', 94, 'مسی',     'Messi',      'ميسي',     'آرژانتین', 'Argentina', 'الأرجنتين', 0),
  mkPlayer('mf2', 'MID', 'gold',     86, 'MID', 88, 'مودریچ',  'Modric',     'مودريتش',  'کرواسی', 'Croatia', 'كرواتيا', 1),
  mkPlayer('mf3', 'MID', 'gold',     85, 'MID', 87, 'دی‌بروینه', 'De Bruyne', 'دي بروين', 'بلژیک', 'Belgium', 'بلجيكا', 0),
  mkPlayer('mf4', 'MID', 'silver',   76, 'MID', 78, 'نوراللهی', 'Noorollahi', 'نور الله', 'ایران', 'Iran', 'إيران', 2),
  mkPlayer('mf5', 'MID', 'bronze',   65, 'MID', 68, 'قدوس',    'Ghoddos',    'قدوس',     'ایران', 'Iran', 'إيران', 2),
  mkPlayer('mf6', 'MID', 'gold',     83, 'MID', 86, 'وینیسیوس', 'Vinicius',  'فينيسيوس', 'برزیل', 'Brazil', 'البرازيل', 1),

  // FWD (~12)
  mkPlayer('fw1', 'FWD', 'platinum', 94, 'ATT', 97, 'مبابه',   'Mbappe',     'مبابي',    'فرانسه', 'France', 'فرنسا', 0),
  mkPlayer('fw2', 'FWD', 'platinum', 93, 'ATT', 95, 'هالند',   'Haaland',    'هالاند',   'نروژ',  'Norway', 'النرويج', 1),
  mkPlayer('fw3', 'FWD', 'gold',     87, 'ATT', 92, 'مسی',     'Messi',      'ميسي',     'آرژانتین', 'Argentina', 'الأرجنتين', 0),
  mkPlayer('fw4', 'FWD', 'gold',     85, 'ATT', 90, 'رونالدو', 'Ronaldo',    'رونالدو',  'پرتغال', 'Portugal', 'البرتغال', 1),
  mkPlayer('fw5', 'FWD', 'gold',     82, 'ATT', 87, 'آزمون',   'Azmoun',     'آزمون',    'ایران', 'Iran', 'إيران', 2),
  mkPlayer('fw6', 'FWD', 'silver',   75, 'ATT', 80, 'طارمی',   'Taremi',     'طارمي',    'ایران', 'Iran', 'إيران', 2),
  mkPlayer('fw7', 'FWD', 'bronze',   68, 'ATT', 72, 'قلی‌زاده', 'Gholizadeh', 'قلي زاده', 'ایران', 'Iran', 'إيران', 2),
  mkPlayer('fw8', 'FWD', 'gold',     84, 'ATT', 89, 'لواندوفسکی', 'Lewandowski', 'ليفاندوفسكي', 'لهستان', 'Poland', 'بولندا', 0, 'locked'),
];

// ─── Special cards in inventory ──────────────────────────────────────────────
const FAN_CARDS = [
  { id: 'fan1', team: { fa: 'آرژانتین', en: 'Argentina', ar: 'الأرجنتين' }, bonus: 250, image: 'assets/fan.webp' },
  { id: 'fan2', team: { fa: 'ایران',   en: 'Iran',      ar: 'إيران' },     bonus: 180, image: 'assets/fan.webp' },
  { id: 'fan3', team: { fa: 'برزیل',   en: 'Brazil',    ar: 'البرازيل' },  bonus: 220, image: 'assets/fan.webp' },
];

const COACH_CARDS = [
  { id: 'co1', multiplier: 1.5,
    name: { fa: 'مربی آرژانتین', en: 'Argentina Coach',    ar: 'مدرب الأرجنتين' },
    condition: { fa: 'دک کامل آرژانتین', en: 'Full Argentina deck', ar: 'تشكيلة الأرجنتين كاملة' } },
  { id: 'co2', multiplier: 1.3,
    name: { fa: 'مربی ایران', en: 'Iran Coach',    ar: 'مدرب إيران' },
    condition: { fa: '۳ بازیکن ایرانی', en: '3 Iranian players', ar: '٣ لاعبين إيرانيين' } },
  { id: 'co3', multiplier: 1.8,
    name: { fa: 'مربی پلاتین', en: 'Platinum Coach',    ar: 'مدرب البلاتين' },
    condition: { fa: '۲ بازیکن پلاتین', en: '2 Platinum players', ar: '٢ لاعبين بلاتيني' } },
];

// ─── Sponsor presets ───────────────────────────────────────────────────────
// Three real Iranian brands rotated across the lineup screen + pitch
// billboards. Each preset has its own brand colors, mark, name, tagline.
// Per PM: display only — no gameplay effect.
const SPONSORS = {
  mci: {
    id: 'mci',
    mark: '۱',                       // همراه اول's "1" mark
    color: '#DC2626', color2: '#7F1D1D',
    name: { fa: 'همراه اول', en: 'MCI', ar: 'MCI' },
    short: { fa: 'همراه اول', en: 'MCI', ar: 'MCI' },
    tagline: {
      fa: 'همراه شما در هر بازی',
      en: 'With you on every matchday',
      ar: 'معك في كل مباراة',
    },
  },
  blu: {
    id: 'blu',
    mark: 'blu',                     // blu bank's lowercase wordmark
    color: '#1FA2FF', color2: '#0763B5',
    name: { fa: 'بلوبانک', en: 'Blu Bank', ar: 'Blu Bank' },
    short: { fa: 'بلوبانک', en: 'blu', ar: 'blu' },
    tagline: {
      fa: 'بانکی به سادگی یک اپ',
      en: 'Banking as simple as an app',
      ar: 'مصرفية بسهولة تطبيق',
    },
  },
  mili: {
    id: 'mili',
    mark: 'MG',                      // Mili Gold's MG monogram
    color: '#F0B834', color2: '#8E5E10',
    name: { fa: 'میلی گلد', en: 'Mili Gold', ar: 'Mili Gold' },
    short: { fa: 'میلی گلد', en: 'mili', ar: 'mili' },
    tagline: {
      fa: 'طلای دیجیتال در جیب شما',
      en: 'Digital gold in your pocket',
      ar: 'الذهب الرقمي في جيبك',
    },
  },
};

// ─── Deck score formula ─────────────────────────────────────────────────────
// Base = sum of Overall across the 5 slots
// Final = (Base × Coach multiplier) + Fan bonus
// XP estimate = Final × 1.6 (purely illustrative)
function computeDeckScore(slots, fanBonus, coachMultiplier) {
  const filled = Object.values(slots).flat().filter(Boolean);
  const base = filled.reduce((acc, p) => acc + (p?.overall || 0), 0);
  const mult = coachMultiplier || 1.0;
  const bonus = fanBonus || 0;
  const final = Math.round(base * mult) + bonus;
  const xp = Math.round(final * 1.6);
  return { base, mult, bonus, final, xp, filled: filled.length };
}

// ─── Preset decks for "filled" tweak states ─────────────────────────────────
// Indices into COLLECTION are stored by id for clarity.
// Formation: 1 GK · 1 DEF · 2 MID · 1 FWD (locked, MVP)
function makePresetSlots() {
  const byId = Object.fromEntries(COLLECTION.map((p) => [p.id, p]));
  return {
    GK:  [byId.gk2],
    DEF: [byId.df1],
    MID: [byId.mf1, byId.mf2],
    FWD: [byId.fw3],
  };
}
function makePartialSlots() {
  const byId = Object.fromEntries(COLLECTION.map((p) => [p.id, p]));
  return {
    GK:  [byId.gk2],
    DEF: [null],
    MID: [byId.mf1, null],
    FWD: [byId.fw3],
  };
}
function makeEmptySlots() {
  return { GK: [null], DEF: [null], MID: [null, null], FWD: [null] };
}
// "invalid" — a wrong-position card placed in MID slot (a FWD card)
function makeInvalidSlots() {
  const byId = Object.fromEntries(COLLECTION.map((p) => [p.id, p]));
  return {
    GK:  [byId.gk2],
    DEF: [byId.df1],
    MID: [byId.mf1, byId.fw4],   // wrong! Ronaldo (FWD) in MID slot
    FWD: [byId.fw3],
  };
}

Object.assign(window, {
  LU_I18N,
  COLLECTION, FAN_CARDS, COACH_CARDS, SPONSORS,
  computeDeckScore,
  makePresetSlots, makePartialSlots, makeEmptySlots, makeInvalidSlots,
});
