// ============================================================
// AI-Men · 공유 스토어 & 상수 (신규 기능용)
// 회원가입 프로필 · 나의 인생 구절 로그 · 성장점수/추천 · 컨페티
// 모든 신규 화면이 window.UserStore 등으로 접근합니다.
// ============================================================
(function () {
  // ---- 학년 / 교회직분 옵션 ----
  const GRADE_OPTIONS = [
    '초등 1학년','초등 2학년','초등 3학년','초등 4학년','초등 5학년','초등 6학년',
    '중등 1학년','중등 2학년','중등 3학년',
    '고등 1학년','고등 2학년','고등 3학년',
    '대학 1학년','대학 2학년','대학 3학년','대학 4학년',
    '성인',
  ];
  const ROLE_OPTIONS = ['성도','집사','안수집사','장로','권사','전도사','부목사','목사'];

  // ---- 5단계 성장나무 닉네임(레벨 칭호) ----
  const STAGE_TITLES = [
    { stage: 1, title: '기도 새싹',   emoji: '🌱', xp: '0–99 XP' },
    { stage: 2, title: '기도나무',     emoji: '🌿', xp: '100–299 XP' },
    { stage: 3, title: '믿음 지킴이',  emoji: '⭐', xp: '300–599 XP' },
    { stage: 4, title: '비저너리',     emoji: '🌟', xp: '600–999 XP' },
    { stage: 5, title: '드림챔피언',   emoji: '🏆', xp: '1,000+ XP' },
  ];

  function todayStr() {
    const d = new Date();
    const p = (n) => String(n).padStart(2, '0');
    return `${d.getFullYear()}-${p(d.getMonth() + 1)}-${p(d.getDate())}`;
  }

  // ---- 사용자 스토어 (localStorage) ----
  const KEY = 'aimen_user_v2';
  const DEFAULTS = {
    name: '은혜',
    nickname: '별빛기도',
    grade: '대학 2학년',
    role: '성도',
    joinedAt: '2026-03-12',
    xp: 540,                 // Lv.3 근처
    growthPoints: 35,        // 추천(나눔) 누적 성장점수
    recommendCount: 7,       // 추천 보낸 횟수
    // 나의 인생 구절 로그 (시간순 · 락인 타임라인)
    lifeVerses: [
      { id:'lv1', verse:'내게 능력 주시는 자 안에서 내가 모든 것을 할 수 있느니라', ref:'빌립보서 4:13', at:'2026-03-12', stageTitle:'기도 새싹', note:'처음 가입하던 날, 시험을 앞두고' },
      { id:'lv2', verse:'여호와는 나의 목자시니 내게 부족함이 없으리로다', ref:'시편 23:1', at:'2026-04-20', stageTitle:'기도나무', note:'마음이 불안할 때 붙든 말씀' },
      { id:'lv3', verse:'강하고 담대하라 두려워하지 말며 놀라지 말라', ref:'여호수아 1:9', at:'2026-05-28', stageTitle:'믿음 지킴이', note:'새로운 도전을 시작하며' },
    ],
  };

  function read() {
    try { return Object.assign({}, DEFAULTS, JSON.parse(localStorage.getItem(KEY)) || {}); }
    catch (e) { return Object.assign({}, DEFAULTS); }
  }
  function write(obj) { try { localStorage.setItem(KEY, JSON.stringify(obj)); } catch (e) {} }

  const UserStore = {
    get() { return read(); },
    set(patch) { const next = Object.assign(read(), patch); write(next); return next; },
    addLifeVerse(v) {
      const u = read();
      const stage = STAGE_TITLES.slice().reverse().find(s => true); // current title resolved elsewhere
      u.lifeVerses = [{ id: 'lv' + Date.now(), at: todayStr(), ...v }, ...(u.lifeVerses || [])];
      write(u); return u;
    },
    addRecommend(points) {
      const u = read();
      u.recommendCount = (u.recommendCount || 0) + 1;
      u.growthPoints = (u.growthPoints || 0) + (points || 5);
      write(u); return u;
    },
  };

  // ---- 컨페티 / 팡파레 (라이브러리 없이 DOM) ----
  function fireConfetti(opts) {
    opts = opts || {};
    const root = opts.root || document.querySelector('.phone') || document.body;
    if (!root) return;
    const colors = ['#FFC529', '#FFE08A', '#7FB0DD', '#E7B23E', '#9AD6A0', '#F58AA0', '#C8A6F0'];
    const N = opts.count || 80;
    const layer = document.createElement('div');
    layer.style.cssText = 'position:absolute;inset:0;pointer-events:none;z-index:9999;overflow:hidden';
    root.appendChild(layer);
    for (let i = 0; i < N; i++) {
      const c = document.createElement('div');
      const size = 6 + Math.random() * 8;
      const left = Math.random() * 100;
      const dur = 1400 + Math.random() * 1400;
      const delay = Math.random() * 250;
      const rot = Math.random() * 360;
      const color = colors[(Math.random() * colors.length) | 0];
      const round = Math.random() > 0.5 ? '50%' : '2px';
      c.style.cssText = `position:absolute;top:-20px;left:${left}%;width:${size}px;height:${size * (0.5 + Math.random())}px;background:${color};border-radius:${round};opacity:0;transform:rotate(${rot}deg);will-change:transform,opacity`;
      layer.appendChild(c);
      const xDrift = (Math.random() - 0.5) * 160;
      c.animate([
        { transform: `translate(0,0) rotate(${rot}deg)`, opacity: 1 },
        { transform: `translate(${xDrift}px, ${root.clientHeight + 40}px) rotate(${rot + 540}deg)`, opacity: 1, offset: 0.85 },
        { transform: `translate(${xDrift}px, ${root.clientHeight + 60}px) rotate(${rot + 620}deg)`, opacity: 0 },
      ], { duration: dur, delay, easing: 'cubic-bezier(.2,.6,.4,1)', fill: 'forwards' });
    }
    setTimeout(() => layer.remove(), 3200);
  }

  // ---- 현재 레벨 타이틀 헬퍼 ----
  function titleForXp(xp) {
    if (xp >= 1000) return STAGE_TITLES[4];
    if (xp >= 600) return STAGE_TITLES[3];
    if (xp >= 300) return STAGE_TITLES[2];
    if (xp >= 100) return STAGE_TITLES[1];
    return STAGE_TITLES[0];
  }

  Object.assign(window, { GRADE_OPTIONS, ROLE_OPTIONS, STAGE_TITLES, UserStore, fireConfetti, titleForXp, aimenToday: todayStr });
})();
