// data.jsx — 쩨우스 demo content. Brand voice throughout (다정한 부산 친구).
// Everything attaches to a Trip(방문) or the Home(집).

const JJ = {
  home: {
    name: '쩨우스',
    sub: '손님을 귀하게 맞이하는, 바닷가의 집',
    place: '부산 · 동래',
    visitsCount: 14,
  },
  host: { initial: '쩨', name: '지혜', role: '호스트' },
  guest: { initial: '민', name: '민서', role: '손님' },

  trip: {
    dates: '6월 13일 – 16일',
    nights: 3,
    welcome: '민서야, 곧 만나요.\n동래 우리집에서 부산 며칠, 푹 쉬다 가요.',
    arrive: { train: 'KTX 045', from: '서울', time: '6월 13일 (금) 14:32', platform: '부산역 3번 출구' },
  },

  // 부산 지도 핀 (호스트 큐레이션) — '우리의 부산'
  pins: [
    { id: 'p1', name: '흰여울문화마을', tag: '바다 산책', scene: 'sea', note: '아침에 커피 들고 걷기 좋아요. 영도 가는 길.', host: true },
    { id: 'p2', name: '복순도가 포장마차', tag: '저녁·술', scene: 'market', note: '내가 제일 좋아하는 곳. 회랑 막걸리.', host: true },
    { id: 'p3', name: '신기산성 카페', tag: '노을·커피', scene: 'cafe', note: '해 질 때 가면 노을이 통째로 보여요.', host: true },
    { id: 'p4', name: '감천문화마을', tag: '골목·사진', scene: 'hill', note: '사람 많지만 골목은 진짜 예뻐요.', host: true },
    { id: 'p5', name: '태종대 등대', tag: '바다·산책', scene: 'bridge', note: '바람 쐬러. 다누비 열차 타도 좋고.', host: true },
    { id: 'p6', name: '남포동 비프광장', tag: '먹거리', scene: 'temple', note: '씨앗호떡 꼭. 저녁 산책 코스.', host: true },
  ],

  // 손님 위시리스트 (가고 싶은 곳) — 추천보다 늘 우선
  wishlist: [
    { id: 'w1', pinId: 'p1', name: '흰여울문화마을', when: '도착 첫날 아침', by: 'guest' },
    { id: 'w2', name: '광안리 해변 야경', when: '아무 밤이나', by: 'guest', custom: true, scene: 'night' },
    { id: 'w3', pinId: 'p3', name: '신기산성 카페', when: '노을 시간', by: 'host' }, // 호스트가 권함
  ],

  // 손님 선호
  prefs: [
    { k: '알레르기', v: '땅콩 · 갑각류', warn: true },
    { k: '못 먹는 것', v: '향이 강한 거(고수)' },
    { k: '좋아하는 것', v: '회, 국물, 단 커피' },
    { k: '기상', v: '아침잠 많아요 😴 늦잠 양해!' },
  ],

  // 손님 요청
  requests: [
    { id: 'r1', text: '수건 한 장만 더 주실 수 있어요?', state: 'done', t: '어제 21:10' },
    { id: 'r2', text: '아이폰 충전기(C타입) 빌릴 수 있을까요?', state: 'doing', t: '오늘 09:24' },
  ],

  // 웰컴 키트 (집에 귀속)
  kit: [
    { k: 'door', icon: 'key', title: '도어락', v: '0613 ＊ 누르고 들어와요', hint: '체크인 번호' },
    { k: 'wifi', icon: 'spark', title: '와이파이', v: 'JJEUS_5G', hint: '비번: lovejje1004' },
    { k: 'charge', icon: 'wallet', title: '충전기', v: '거실 TV 옆 서랍', hint: 'C·라이트닝 다 있어요' },
    { k: 'towel', icon: 'home', title: '수건 · 세면', v: '욕실 위 선반', hint: '더 필요하면 말해요' },
    { k: 'life', icon: 'heart', title: '생필품', v: '주방 첫 칸', hint: '편하게 쓰세요' },
  ],

  // 집 안내
  guide: {
    address: '부산 동래구 명륜로 가는 길',
    how: '부산역 → 지하철 1호선 → 동래역 4번 출구 → 도보 6분',
    weather: { t: '23°', d: '맑음, 저녁 선선', tip: '바닷바람 — 얇은 겉옷 하나' },
  },

  // 공유 앨범
  album: [
    { id: 'a1', scene: 'sea', cap: '흰여울 첫 산책', pin: '흰여울문화마을' },
    { id: 'a2', scene: 'cafe', cap: '노을 커피', pin: '신기산성 카페' },
    { id: 'a3', scene: 'market', cap: '막걸리 한 잔', pin: '복순도가' },
    { id: 'a4', scene: 'night', cap: '광안리 밤바다', pin: '광안리' },
    { id: 'a5', scene: 'hill', cap: '감천 골목', pin: '감천문화마을' },
    { id: 'a6', scene: 'sunset', cap: '태종대 바람', pin: '태종대' },
  ],

  // 공동지갑
  wallet: {
    balance: 48000,
    members: [
      { who: 'host', name: '지혜', put: 60000 },
      { who: 'guest', name: '민서', put: 60000 },
    ],
    tx: [
      { id: 't1', text: '장보기 (마트)', who: 'host', amt: -32400, t: '6/13' },
      { id: 't2', text: '복순도가 저녁', who: 'guest', amt: -28600, t: '6/14' },
      { id: 't3', text: '충전 · 민서', who: 'guest', amt: +60000, t: '6/13' },
      { id: 't4', text: '충전 · 지혜', who: 'host', amt: +60000, t: '6/13' },
      { id: 't5', text: '씨앗호떡 · 간식', who: 'host', amt: -8000, t: '6/14' },
    ],
  },

  // 방명록 (집에 누적)
  guestbook: [
    { id: 'g1', name: '민서', date: '이번 방문', tone: 'guest', text: '곧 한 줄 남길게요 ✍️', pending: true },
    { id: 'g2', name: '준', date: "'25 4월", tone: 'sea', text: '쩨 누나 집 막걸리 못 잊음. 흰여울 아침 산책이 최고였어요. 또 올게요!' },
    { id: 'g3', name: '하늘', date: "'24 11월", tone: 'amber', text: '낯선 부산이 하나도 안 무서웠어요. 집밥이 진짜… 고마웠습니다.' },
    { id: 'g4', name: '서아', date: "'24 8월", tone: 'guest', text: '광안리 밤바다 보여줘서 고마워요. 여기 오면 부산이 우리집 같아져.' },
  ],

  // 추억 선물 — 떠날 때 받는 한 편의 이야기
  memory: {
    title: '민서의 부산, 사흘',
    sub: '2026 · 여름 · 동래',
    cover: 'sunset',
    chapters: [
      { scene: 'sea', t: '첫날 아침', body: '흰여울을 걸었다. 커피가 식는 줄도 모르고.' },
      { scene: 'market', t: '둘째날 밤', body: '복순도가에서 막걸리. 오래 웃었다.' },
      { scene: 'night', t: '셋째날', body: '광안리 밤바다. 가고 싶다던 곳, 결국 갔다.' },
    ],
    letter: '민서야, 또 와요. 다음엔 동백섬 한 바퀴 돌자.\n— 쩨',
    stats: { places: 7, photos: 42, days: 3 },
  },

  // 여정 컬렉션 (보관함) — 손님은 본인 것만, 호스트는 전부
  journeys: [
    { id: 'j1', guest: '민서', initial: '민', tone: 'guest', dates: '2026.6.13–16', nights: 3, cover: 'sunset', spent: 69000, km: 38, photos: 42, places: 7, current: true,
      route: [{ name: '동래 집', scene: 'hill', km: 0 }, { name: '흰여울문화마을', scene: 'sea', km: 11 }, { name: '복순도가', scene: 'market', km: 6 }, { name: '신기산성 카페', scene: 'cafe', km: 5 }, { name: '광안리 밤바다', scene: 'night', km: 9 }, { name: '감천문화마을', scene: 'hill', km: 7 }] },
    { id: 'j5', guest: '민서', initial: '민', tone: 'guest', dates: '2025.9.20–22', nights: 2, cover: 'sea', spent: 44000, km: 21, photos: 24, places: 4,
      route: [{ name: '동래 집', scene: 'hill', km: 0 }, { name: '해운대', scene: 'sea', km: 6 }, { name: '송정', scene: 'sea', km: 8 }, { name: '기장 죽성', scene: 'temple', km: 7 }] },
    { id: 'j2', guest: '준', initial: '준', tone: 'sea', dates: '2025.4.10–12', nights: 2, cover: 'bridge', spent: 52000, km: 24, photos: 31, places: 5,
      route: [{ name: '동래 집', scene: 'hill', km: 0 }, { name: '태종대 등대', scene: 'bridge', km: 13 }, { name: '남포동', scene: 'temple', km: 6 }, { name: '흰여울', scene: 'sea', km: 5 }] },
    { id: 'j3', guest: '하늘', initial: '하', tone: 'amber', dates: '2024.11.2–4', nights: 2, cover: 'cafe', spent: 47000, km: 19, photos: 27, places: 4,
      route: [{ name: '동래 집', scene: 'hill', km: 0 }, { name: '온천천 산책', scene: 'sea', km: 4 }, { name: '전포 카페거리', scene: 'cafe', km: 8 }, { name: '광안리', scene: 'night', km: 7 }] },
    { id: 'j4', guest: '서아', initial: '서', tone: 'guest', dates: '2024.8.16–18', nights: 2, cover: 'night', spent: 58000, km: 29, photos: 35, places: 6,
      route: [{ name: '동래 집', scene: 'hill', km: 0 }, { name: '광안리', scene: 'night', km: 9 }, { name: '해운대', scene: 'sea', km: 6 }, { name: '동백섬', scene: 'sea', km: 3 }] },
  ],
};

// Trip states (생명주기) — director steps through these
const JJ_STATES = [
  { key: 'requested',  name: '요청',      en: 'Requested',   phrase: '가고 싶어요', tone: 'coral' },
  { key: 'invited',    name: '초대됨',    en: 'Invited',     phrase: '곧 만나요',   tone: 'coral' },
  { key: 'prearrival', name: '도착 전',   en: 'Pre-arrival', phrase: '어서 와요',   tone: 'coral' },
  { key: 'staying',    name: '머무는 중', en: 'Staying',     phrase: '같이 가요',   tone: 'amber' },
  { key: 'departing',  name: '떠남',      en: 'Departing',   phrase: '잘 가요',     tone: 'sea' },
  { key: 'after',      name: '그 후',     en: 'After',       phrase: '또 와요',     tone: 'sea' },
];

// ── 화면별 세부 상태 (before/after · empty/filled) ───────────
// 디렉터의 '화면 상태' 카테고리에서 고른다. 첫 항목이 기본값.
const SCREEN_STATES = {
  // 트립 타임라인 — 단계별 (persona:state)
  'guest:requested':  [{ k: 'draft', label: '요청 작성', note: '가고 싶다고 보내기 전' }, { k: 'sent', label: '요청 보냄', note: '쩨의 수락을 기다리는 중' }],
  'host:requested':   [{ k: 'incoming', label: '요청 받음', note: '민서가 가고 싶대요' }, { k: 'accepted', label: '초대로 전환', note: '수락하고 초대장 발행' }],
  'guest:invited':    [{ k: 'received', label: '초대 받음', note: '초대장이 막 도착한 상태' }, { k: 'ready', label: '방문 준비 완료', note: '선호·둘러보기를 마친 상태' }],
  'guest:prearrival': [{ k: 'pre', label: '티켓 공유 전', note: '아직 도착 정보를 안 보냄' }, { k: 'shared', label: '티켓 공유 후', note: '도착 정보 전달 + 마중 약속' }],
  'guest:staying':    [{ k: 'empty', label: '계획 비어있음', note: '도착 직후, 아직 안 담음' }, { k: 'planned', label: '장소 담은 후', note: '날짜별로 가고 싶은 곳을 담음' }],
  'guest:departing':  [{ k: 'gift', label: '방명록 남기기 전', note: '선물은 받고, 방명록은 아직' }, { k: 'left', label: '방명록 남긴 후', note: '한 줄 남기고 배웅 준비' }],
  'guest:after':      [{ k: 'notice', label: '회고 도착', note: '일주일 뒤, 회고가 다시 옴' }, { k: 'request', label: '다시 여행 요청', note: '또 가고 싶다고 날짜를 보냄' }],
  'host:invited':     [{ k: 'compose', label: '초대 보내기 전', note: '아직 발행 전' }, { k: 'sent', label: '초대 전송됨', note: '링크 발행 완료' }],
  'host:prearrival':  [{ k: 'waiting', label: '도착 정보 대기', note: '손님이 티켓 공유 전' }, { k: 'tracking', label: '티켓 받음', note: '도착 추적 + 마중 준비' }],
  'host:staying':     [{ k: 'none', label: '요청 없음', note: '조용한 하루' }, { k: 'incoming', label: '요청 들어옴', note: '민서의 요청 도착' }, { k: 'done', label: '요청 처리 완료', note: '다 챙긴 상태' }],
  'host:departing':   [{ k: 'auto', label: '선물 자동 생성', note: '손편지 더하기 전' }, { k: 'letter', label: '손편지 추가 후', note: '건넬 준비 완료' }],
  'host:after':       [{ k: 'pending', label: '방명록 대기', note: '아직 글이 없음' }, { k: 'received', label: '방명록 받음', note: '집에 한 줄 쌓임' }, { k: 'rerequest', label: '재방문 요청 받음', note: '민서가 또 오고 싶대요' }],
  // 탭 화면
  'wallet':           [{ k: 'empty', label: '충전 전', note: '아직 모으기 전' }, { k: 'funded', label: '충전·지출 기록', note: '내역이 쌓인 상태' }, { k: 'settled', label: '정산 완료', note: '떠나며 1회 정산' }],
  'album':            [{ k: 'empty', label: '사진 없음', note: '아직 안 올린 상태' }, { k: 'filled', label: '사진 모음', note: '함께 찍은 사진들' }],
  'home:prefs':       [{ k: 'empty', label: '선호 입력 전', note: '아직 안 남김' }, { k: 'filled', label: '선호 남긴 후', note: '호스트가 배려' }],
  'home:guestbook':   [{ k: 'before', label: '작성 전', note: '한 줄 남기기 전' }, { k: 'after', label: '작성 후', note: '집에 누적됨' }],
};

// 현재 화면(st)에 해당하는 상태 목록과 컨텍스트 라벨
function getScreenStates(st) {
  let key = null, ctx = '';
  if (st.tab === 'trip') { key = st.persona + ':' + st.tripState; ctx = JJ_STATES.find(s => s.key === st.tripState).name + ' 단계'; }
  else if (st.tab === 'wallet') { key = 'wallet'; ctx = '공동지갑'; }
  else if (st.tab === 'album') { key = 'album'; ctx = '공유 앨범'; }
  else if (st.tab === 'home' && st.sub === 'prefs') { key = 'home:prefs'; ctx = '손님 선호'; }
  else if (st.tab === 'home' && st.sub === 'guestbook') { key = 'home:guestbook'; ctx = '방명록'; }
  const options = SCREEN_STATES[key];
  if (!options) {
    const labelMap = { map: '부산 지도', home: '집' };
    return { options: [{ k: 'default', label: '기본 화면', note: '이 화면은 단일 상태예요' }], ctx: labelMap[st.tab] || '화면', single: true };
  }
  return { options, ctx, single: false };
}
// st.scr를 현재 옵션에 맞춰 보정
function resolveScr(st) {
  const { options } = getScreenStates(st);
  return (options.find(o => o.k === st.scr) || options[0]).k;
}

Object.assign(window, { JJ, JJ_STATES, SCREEN_STATES, getScreenStates, resolveScr });
