// 튜브픽 v2 — 공통 테마 + 헤더 + 푸터 + 데이터
// SaaS의 깔끔함 + Bold의 마케팅 에너지

window.TP2_THEME = {
  bg: '#fafafa',
  card: '#ffffff',
  ink: '#0e0e1a',
  accent: '#5b47e0',     // 인디고
  accent2: '#8b7cf0',    // 라이트 바이올렛
  hot: '#ff5a5f',        // 마케팅 강조용 (BOLD 톤)
  sub: 'rgba(14,14,26,.6)',
  dim: 'rgba(14,14,26,.4)',
  line: 'rgba(14,14,26,.08)',
  shadow: '0 1px 2px rgba(14,14,26,.04), 0 8px 24px rgba(14,14,26,.06)',
  shadowSoft: '0 1px 2px rgba(14,14,26,.04), 0 2px 8px rgba(14,14,26,.04)',
  shadowBig: '0 24px 80px rgba(91,71,224,.18), 0 4px 12px rgba(14,14,26,.08)',
  sans: "'Noto Sans KR', system-ui, sans-serif",
  mono: "ui-monospace, 'SF Mono', Menlo, monospace",
};

window.TP2_DATA = {
  brand: '튜브픽',
  brandEn: 'TubePick',

  // 네비게이션
  nav: [
    { href: 'index.html',     label: '홈',                short: 'Home' },
    { href: 'why.html',       label: '왜 튜브픽?',         short: 'Why' },
    { href: 'guide.html',     label: '구매 가이드',         short: 'Guide' },
    { href: 'channels.html',  label: '채널 구매하기',       short: 'Channels' },
    { href: 'faq.html',       label: '자주 묻는 질문',      short: 'FAQ' },
    { href: 'risk.html',      label: '리스크 가이드',       short: 'Risk' },
  ],

  pricing: {
    care: {
      name: '튜브픽 케어 채널',
      sub: '한 달 토탈 AS 케어 — 조회수 · 구독자 · 무제한 채널 교체',
      original: 800000,
      tiers: [
        { id: 'public', label: '일반',          price: 450000 },
        { id: 'intro',  label: '소개 / 재구매',     price: 399000 },
        { id: 'team',   label: '팀단위 / 제휴',   price: 355000 },
      ],
    },
    select: {
      name: '튜브픽 셀렉트 채널',
      sub: '구독자 1,000명 + 시청시간 4,000시간 달성 채널',
      original: 700000,
      price: 350000,
    },
    appeal: {
      name: '항소완료 채널',
      sub: '유튜브 정책 항소 절차를 성공적으로 완료한 검증 채널',
      price: '문의',
    },
    bulk: {
      name: '대량 구매 (10개 이상)',
      sub: '대량 구매 시 특별 할인',
      price: '문의',
    },
    adsense: {
      name: '활성화 애드센스 계정',
      sub: '수익화 가능한 활성화 애드센스 계정',
      price: 330000,
      status: '품절',
    },
    custom: {
      name: '기타 커스텀 채널',
      sub: '구독자 몇만 이상 / 본인 얼굴 노출 창작 영상 / 카테고리 지정 등 맞춤 견적',
      price: '문의',
    },
  },

  perks: [
    { n: '01', t: '알고리즘 우대',  d: '수익화 채널은 유튜브 알고리즘이 우선적으로 노출시켜 신규 영상 도달률이 높습니다.' },
    { n: '02', t: '검증된 품질',    d: '이미 수익화 기준을 통과한 채널 — 유튜브가 인정한 고품질 채널만 취급합니다.' },
    { n: '03', t: '즉시 수익',      d: '기다림 없이, 영상 업로드 즉시 수익이 발생합니다.' },
    { n: '04', t: '한 달 토탈 AS 케어', d: '조회수 AS · 구독자 AS · 그래도 안 되면 한 달 무제한 채널 교체.' },
  ],

  stats: [
    { v: '120+',   l: '직접 운영 채널' },
    { v: '1,250+', l: '누적 판매' },
    { v: '99%',    l: '이전 성공률' },
    { v: '30일',   l: '토탈 AS 케어' },
  ],

  channelCards: [
    { id: 'CH-04', subs: '12.4K', views: '380K', topic: '쇼츠·엔터' },
    { id: 'CH-07', subs: '8.2K',  views: '1.1M', topic: '리뷰' },
    { id: 'CH-12', subs: '21.0K', views: '720K', topic: '브이로그' },
    { id: 'CH-15', subs: '6.5K',  views: '410K', topic: '교육' },
    { id: 'CH-19', subs: '14.8K', views: '900K', topic: '음식' },
    { id: 'CH-23', subs: '9.7K',  views: '550K', topic: '게임' },
  ],

  testimonials: [
    { name: '김**', role: '브이로그 채널', quote: '구매 3주 만에 첫 정산이 나왔습니다. 직접 키울 때와는 비교가 안 되는 속도였어요.' },
    { name: '이**', role: '쇼츠 채널',     quote: '알고리즘이 확실히 다릅니다. 평소 1만 회였던 영상이 같은 퀄리티로 30만 회를 찍었습니다.' },
    { name: '박**', role: '리뷰 채널',     quote: '이전도 빨랐고, A/S 정책이 있다는 게 가장 신뢰가 갔습니다. 다음 채널도 여기서 살 예정.' },
    { name: '최**', role: '교육 콘텐츠',   quote: '항소완료 채널을 추천받아 구매했는데, 다채널 운영이 안정적이에요. 감사합니다.' },
    { name: '정**', role: '엔터테인먼트',  quote: '재고 문의가 빠르고, 결제 후 2일 만에 이전 완료. 군더더기 없이 깔끔합니다.' },
    { name: '조**', role: '음식/요리',     quote: '검증된 채널이라 그런지, 같은 영상도 노출이 다릅니다. 진작 살 걸 그랬어요.' },
  ],

  steps: [
    {
      n: '01', t: '30초 간단 신청',
      d: '카카오톡 오픈채팅으로 문의하시면 친절하게 상담해드립니다. 원하시는 채널 종류를 선택하고 간단한 정보만 입력하시면 됩니다.',
      bullets: [
        '희망하는 채널 종류 (케어 / 셀렉트 / 항소완료)',
        '채널 이전받을 구글 계정 이메일',
        '연락처 (카카오톡)',
      ],
    },
    {
      n: '02', t: '빠른 채널 이전',
      d: '결제 확인 후 최대한 빠르게, 안전하게 채널을 이전해드립니다. 전체 과정을 카카오톡으로 실시간 안내해드리니 안심하세요.',
      bullets: [
        '결제 확인 및 채널 준비',
        '제공하신 구글 계정으로 소유권 이전 요청',
        '이전 승인 및 완료 (카톡 실시간 안내)',
        '최종 확인 및 운영 가이드 제공',
      ],
      meta: '⏰ 평균 2일, 최대 7일',
    },
    {
      n: '03', t: '바로 수익 창출',
      d: '채널 이전 후 영상을 업로드하기만 하면 즉시 수익화가 시작됩니다.',
      bullets: [
        '본인 애드센스 계정 연결 (유튜브 스튜디오 3분)',
        '원하는 컨셉의 영상 업로드',
        '영상 업로드 즉시 수익 발생 시작',
      ],
      meta: '💡 꾸준한 업로드가 성공의 핵심',
    },
  ],

  faq: [
    {
      q: '유튜브 수익화 채널을 운영하는 건 안전한가요?',
      a: `네, 안전합니다. 튜브픽은 이미 유튜브 수익화 기준을 통과한 채널만을 제공합니다.

✅ 안전한 이유
• 유튜브 공식 채널 소유권 이전 절차 사용
• 정상적으로 수익화 조건을 달성한 채널만 판매
• 한 달 토탈 AS 케어 (조회수 · 구독자 · 채널 교체)로 문제 발생 시 보증

* A/S는 명확한 문제 발생 시에만 제공되며, 수익 창출 박탈 또는 채널 정지 등 중대한 문제에 한정됩니다.`,
    },
    {
      q: 'A/S 규정은 어떻게 되나요?',
      a: `🛡️ 한 달 토탈 AS 케어 — 단계별로 보장합니다

① 조회수 AS
정상 영상 5개를 한 달 안에 업로드했는데 모든 영상이 500회 미만일 경우 → 조회수 AS 진행

② 구독자 AS
구독자가 1,000명 이하로 떨어질 경우 → 구독자 AS 진행

③ 무제한 채널 교체
위 두 가지 기본 AS 후에도 해결되지 않으면 → 한 달 동안 무제한으로 다른 채널 교체

📅 A/S 기간 기준 (애드센스 기준)
• 30일 이전에 발생한 문제에 한해 적용 (본인 애드센스 변경 전 기준)
• 30일 경과 후 본인 애드센스로 변경하지 않은 상태에서 발생한 문제는 불가

⚠️ A/S 불가 조건
• 주소유자 변경 미진행으로 인한 문제 (변경 필수)
• 채널 운영 중 기존 업로드 영상을 삭제한 경우
• 영상이 비공개되었거나 삭제 이력이 있는 채널`,
    },
    {
      q: '채널 이전 과정은 어떻게 되나요?',
      a: `결제 확인 후 고객님께서 제공해주신 이메일로 채널 소유자 권한을 이전해 드립니다.

📋 이전 단계
1단계 — 결제 확인 및 채널 준비
2단계 — 제공하신 구글 계정으로 소유권 이전 요청
3단계 — 이전 승인 (카톡 실시간 안내)
4단계 — 최종 확인 및 운영 가이드 제공

전 과정을 카카오톡으로 실시간 안내해 드리며, 입금 후 최대 7일 이내(보통 2일 소요)로 안전하게 완료됩니다.`,
    },
    {
      q: '항소완료 채널과 일반 채널은 무엇이 다른가요?',
      a: `항소완료 채널은 유튜브 정책 위반 항소 절차를 성공적으로 통과한 검증 채널로, 다채널 운영 환경에서 안정성이 더 높습니다.

특히 다채널 운영을 계획 중이시라면 항소완료 채널을 권장드리며, 가격과 재고는 오픈톡으로 문의 부탁드립니다.`,
    },
    {
      q: '채널이 제 애드센스 계정으로 이전되면, 해당 달의 수익은 누구에게 지급되나요?',
      a: `채널 이전이 완료된 달부터 발생하는 유튜브 광고 수익(애드센스 수익)은 모두 새 애드센스 계정(변경자)으로 지급됩니다.

📌 핵심: 이전 시점 이후의 수익은 100% 변경자에게 귀속됩니다.`,
    },
    {
      q: '이전 시점이 월 중간이라면 수익은 어떻게 나눠지나요?',
      a: `유튜브 애드센스 수익은 월 단위로 집계되어 지급됩니다. 그 달에 채널이 새 애드센스 계정으로 연결되면 해당 달 전체 수익은 변경자에게 지급됩니다.`,
    },
    {
      q: '어떤 영상을 올려야 하나요?',
      a: `자유로운 컨셉의 영상을 업로드하실 수 있습니다.

💡 권장 사항
• 꾸준한 영상 업로드가 가장 중요합니다
• 저작권 주의 (무료 음원, 무료 영상 소스 활용)
• 유튜브 커뮤니티 가이드 준수`,
    },
    {
      q: '결제 방법은 어떻게 되나요?',
      a: `무통장 입금 및 코인 송금이 가능합니다. 자세한 계좌 정보는 카카오톡 오픈채팅으로 문의 시 안내드립니다.`,
    },
    {
      q: '대량 구매 할인이 있나요?',
      a: `10개 이상 구매 시 특별 할인을 적용해 드립니다. 정확한 견적은 오픈톡으로 문의 주세요.`,
    },
    {
      q: '추가 문의는 어떻게 하나요?',
      a: `카카오톡 오픈채팅으로 문의해 주시면 가장 빠르게 답변 받으실 수 있습니다. 영업시간 기준 평균 30분 이내 답변드립니다.`,
    },
  ],
};

window.TP2_FORMAT = {
  won: (n) => '₩' + n.toLocaleString('ko-KR'),
};

// ============================================================
// 페이지 콘텐츠 헬퍼 + 비주얼 편집 모드
// ?edit=1 + 관리자 세션이면 텍스트 클릭 → 인라인 편집 모달
// ============================================================

// URL 파라미터로 편집 모드 감지 (동기) — 실제 권한은 저장 시 백엔드가 검증
try {
  const _u = new URL(location.href);
  if (_u.searchParams.get('edit') === '1') window.TP2_ADMIN_EDIT = true;
} catch (_) {}

// 내부: 원본 텍스트 추출
function _tp2value(page, key, fallback) {
  try {
    const C = window.TP2_CONTENT && window.TP2_CONTENT[page] && window.TP2_CONTENT[page][key];
    if (C && C.content != null && C.content !== '') return C.content;
  } catch (_) {}
  return fallback;
}

// 텍스트 헬퍼 — 일반 모드는 string, 편집 모드는 클릭 가능한 React 요소
window.tp2t = function (page, key, fallback) {
  const value = _tp2value(page, key, fallback);
  if (window.TP2_ADMIN_EDIT && typeof React !== 'undefined') {
    return React.createElement('span', {
      className: 'tp2-editable',
      'data-tp2-page': page,
      'data-tp2-key': key,
      title: '클릭해서 편집: ' + page + '/' + key,
    }, value);
  }
  return value;
};

// rich 헬퍼 — dangerouslySetInnerHTML 호환, 편집 모드면 wrapper span 추가
window.tp2h = function (page, key, fallback) {
  let value = _tp2value(page, key, fallback);
  if (window.TP2_ADMIN_EDIT) {
    value = '<span class="tp2-editable" data-tp2-page="' + page + '" data-tp2-key="' + key +
            '" title="클릭해서 편집: ' + page + '/' + key + '">' + value + '</span>';
  }
  return { __html: value };
};

// 편집 모드 UI 부트스트랩 (CSS + 배너 + 클릭 핸들러)
if (window.TP2_ADMIN_EDIT && typeof document !== 'undefined') {
  const _ready = () => {
    if (document.getElementById('tp2-edit-style')) return;

    // CSS
    const s = document.createElement('style');
    s.id = 'tp2-edit-style';
    s.textContent = `
      .tp2-editable {
        outline: 1.5px dashed rgba(91,71,224,.55);
        outline-offset: 3px;
        border-radius: 3px;
        cursor: pointer !important;
        transition: outline-color .12s, background-color .12s;
      }
      .tp2-editable:hover {
        outline-color: rgba(91,71,224,1);
        background: rgba(91,71,224,.10);
      }
      #tp2-edit-banner {
        position: fixed; left: 0; right: 0; top: 0; z-index: 9998;
        background: linear-gradient(135deg, #5b47e0, #8b7cf0);
        color: #fff; padding: 8px 16px; text-align: center;
        font-family: 'Noto Sans KR', system-ui, sans-serif;
        font-size: 13px; font-weight: 700; letter-spacing: 0.3px;
      }
      body { padding-top: 36px; }
    `;
    document.head.appendChild(s);

    // 배너
    const banner = document.createElement('div');
    banner.id = 'tp2-edit-banner';
    banner.innerHTML = '✏️ 비주얼 편집 모드 — 점선 박스 텍스트를 클릭해서 수정 · ' +
                       '<a href="' + location.pathname + '" style="color:#fff;text-decoration:underline">편집 종료</a>';
    document.body.appendChild(banner);

    // 클릭 핸들러 (delegation, capture phase)
    document.addEventListener('click', (e) => {
      const el = e.target.closest && e.target.closest('.tp2-editable');
      if (!el) return;
      e.preventDefault();
      e.stopPropagation();
      window.tp2OpenEditor(el.dataset.tp2Page, el.dataset.tp2Key);
    }, true);
  };
  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', _ready);
  else _ready();
}

// 편집 모달
window.tp2OpenEditor = async function (page, key) {
  // 현재 D1 행 가져오기 (관리자 세션 필요)
  const res = await fetch('/api/admin/page-content', { credentials: 'include' });
  if (!res.ok) {
    alert('관리자 로그인이 필요합니다.\n/admin.html 에서 로그인 후 다시 시도하세요.');
    window.open('/admin.html', '_blank');
    return;
  }
  const list = await res.json();
  const row = list.find(r => r.page_key === page && r.block_key === key);
  if (!row) {
    alert('키 ' + page + '/' + key + ' 가 D1 에 없습니다.\n관리자 → 페이지 콘텐츠 에서 먼저 추가하세요.');
    return;
  }

  const isRich = row.content_type === 'rich';
  const overlay = document.createElement('div');
  overlay.style.cssText =
    'position:fixed;inset:0;background:rgba(0,0,0,.7);z-index:99999;' +
    'display:grid;place-items:center;padding:16px;' +
    "font-family:'Noto Sans KR',system-ui,sans-serif;";
  overlay.innerHTML =
    '<div style="background:#181826;color:#f5f5fa;border:1px solid rgba(245,245,250,.08);border-radius:14px;width:640px;max-width:100%;max-height:90vh;display:flex;flex-direction:column;overflow:hidden;">' +
      '<div style="padding:18px 22px;border-bottom:1px solid rgba(245,245,250,.08);font-size:14px;font-weight:700;display:flex;justify-content:space-between;align-items:center">' +
        '<span>편집 · <code style="font-family:monospace;color:#c0b3ff;background:rgba(139,124,240,.12);padding:2px 8px;border-radius:6px">' + page + '/' + key + '</code></span>' +
        '<span style="font-size:11px;color:rgba(245,245,250,.5)">type: ' + row.content_type + '</span>' +
      '</div>' +
      '<div style="padding:18px 22px;flex:1;overflow:auto;">' +
        (row.description ? '<div style="font-size:12px;color:rgba(245,245,250,.55);margin-bottom:10px">' + row.description + '</div>' : '') +
        (isRich ? '<div style="font-size:11px;color:rgba(245,245,250,.45);margin-bottom:6px;font-family:monospace">HTML 가능: &lt;br/&gt;, &lt;strong&gt;...&lt;/strong&gt;, &lt;span class="hot"&gt;...&lt;/span&gt;</div>' : '') +
        '<textarea id="tp2-ed-ta" style="width:100%;min-height:220px;background:#1f1f30;color:#f5f5fa;border:1px solid rgba(245,245,250,.08);border-radius:8px;padding:12px 14px;font-family:\'Noto Sans KR\',monospace;font-size:13px;line-height:1.6;resize:vertical;outline:none"></textarea>' +
      '</div>' +
      '<div style="padding:14px 22px;border-top:1px solid rgba(245,245,250,.08);display:flex;gap:8px;justify-content:flex-end">' +
        '<button id="tp2-ed-cancel" style="background:#1f1f30;color:#f5f5fa;border:1px solid rgba(245,245,250,.1);padding:10px 16px;border-radius:8px;font-size:13px;font-weight:600;cursor:pointer">취소</button>' +
        '<button id="tp2-ed-save" style="background:#5b47e0;color:#fff;border:none;padding:10px 18px;border-radius:8px;font-size:13px;font-weight:700;cursor:pointer">저장 → 새로고침</button>' +
      '</div>' +
    '</div>';
  document.body.appendChild(overlay);
  const ta = overlay.querySelector('#tp2-ed-ta');
  ta.value = row.content || '';
  ta.focus();

  const close = () => overlay.remove();
  overlay.querySelector('#tp2-ed-cancel').onclick = close;
  overlay.addEventListener('click', e => { if (e.target === overlay) close(); });
  overlay.querySelector('#tp2-ed-save').onclick = async () => {
    try {
      const r = await fetch('/api/admin/page-content/' + row.id, {
        method: 'PATCH',
        credentials: 'include',
        headers: { 'content-type': 'application/json' },
        body: JSON.stringify({ content: ta.value }),
      });
      if (!r.ok) throw new Error('HTTP ' + r.status);
      location.reload();
    } catch (e) { alert('저장 실패: ' + e.message); }
  };
};
