// KASHA website — shared helpers + data (KASHADB 어댑터)
// KASHA = a single photographer/studio offering shoots DIRECTLY to models &
// individuals. Not a marketplace. (Lorem Picsum stand-in imagery.)
//
// 표시용 데이터는 공유 스토어(window.KASHADB)에서 파생됩니다.
// 관리자 대시보드의 변경(상품·앨범·홈 CMS)이 이 화면에 반영돼요.
const DS = window.KASHAPhotosDesignSystem_ecc2b9;

const img = (seed, w, h) => `https://picsum.photos/seed/kasha-${seed}/${w}/${h}`;
const wonStr = (n) => Number(n || 0).toLocaleString("ko-KR");
const fmtTime = (min) => (min >= 120 && min % 60 === 0 ? `${min / 60}시간` : `${min}분`);

// ── 정적 콘텐츠 (마케팅 카피 — 현재는 코드 상수) ──────────────────────
const CATEGORIES = ["전체", "프로필", "모델 포트폴리오", "개인화보", "흑백 인물", "커플·우정"];

const PAYMENT_METHODS = [
  { id: "card", label: "카드결제", icon: "image" },
  { id: "toss", label: "토스페이", icon: "sparkles" },
  { id: "naver", label: "네이버페이", icon: "star" },
  { id: "transfer", label: "계좌이체", icon: "check" },
];

const SERVICES = [
  { icon: "user", title: "프로필 촬영", desc: "취업·비즈니스·배우 프로필. 자연광 톤으로 가장 신뢰감 있는 나를 담아요." },
  { icon: "sparkles", title: "개인 화보", desc: "스튜디오와 야외에서, 평소의 나를 가장 빛나게. 의상·컨셉 함께 기획해요." },
  { icon: "camera", title: "모델 포트폴리오", desc: "신인 모델을 위한 컴카드·룩북. 에이전시 제출 규격에 맞춰 구성해 드려요." },
  { icon: "image", title: "흑백 인물", desc: "군더더기 없는 흑백 톤으로 표정과 분위기에만 집중한 인물 시리즈." },
];

const PROCESS = [
  { step: "01", title: "예약", desc: "원하는 촬영과 날짜·시간을 고르고 온라인으로 결제까지 한 번에." },
  { step: "02", title: "사전 기획", desc: "촬영 전 컨셉·의상·장소를 함께 정해요. 처음이어도 걱정 없어요." },
  { step: "03", title: "촬영", desc: "편안한 분위기 속에서 가장 자연스러운 순간을 담아요." },
  { step: "04", title: "셀렉·보정", desc: "원본 전체 제공, 셀렉 후 7일 이내 보정본을 전달해 드려요." },
];

const REVIEWS = [
  { name: "지민 님", tag: "프로필", seed: "rv1", text: "어색했는데 계속 편하게 리드해 주셔서 인생 프로필 건졌어요. 보정 톤도 딱 제 취향." },
  { name: "현우 님", tag: "모델 포트폴리오", seed: "rv2", text: "컴카드 규격까지 챙겨주셔서 그대로 에이전시에 제출했어요. 결과물 퀄리티가 다릅니다." },
  { name: "수아 님", tag: "개인화보", seed: "rv3", text: "햇살 감성 그대로 담겼어요. 친구들이 다 어디서 찍었냐고 물어봐요!" },
];

const FAQ = [
  { q: "촬영 경험이 전혀 없어도 괜찮나요?", a: "그럼요. 포즈와 표정 모두 현장에서 하나하나 리드해 드려요. 처음 오시는 분이 대부분이에요." },
  { q: "보정본은 언제 받나요?", a: "촬영 당일 원본 전체를 전달드리고, 셀렉해 주신 컷의 보정본은 7일 이내에 보내드려요." },
  { q: "헤어·메이크업도 가능한가요?", a: "제휴 샵 연결이 가능해요. 예약 시 옵션으로 선택하면 시간에 맞춰 안내해 드려요." },
  { q: "야외 촬영도 되나요?", a: "개인화보·모델 패키지는 스튜디오 + 야외 구성이 기본이에요. 원하는 장소도 협의 가능합니다." },
];

const WORK_HEIGHTS = [360, 300, 260, 340, 280, 320, 270, 300];

// 포트폴리오 사진 소스: 업로드(dataURL)/URL은 그대로, 시드는 picsum
const pimg = (val, w, h) => /^(data:|https?:|\/)/.test(val || "") ? val : img(val, w, h);

// 앨범의 사진 목록 → [{ src, cosplayer }]. 업로드 사진이 있으면 그것을, 없으면 시드 기반.
const albumPhotos = (w) => (w.photos && w.photos.length)
  ? w.photos.map((p) => ({ src: p.src, cosplayer: p.cosplayer || "" }))
  : Array.from({ length: w.count }, (_, i) => ({ src: `${w.seed}-a${i}`, cosplayer: "" }));

// ── 스토어 → 표시용 뷰모델 파생 ───────────────────────────────────────
function toWebPackage(p) {
  return Object.assign({}, p, {
    priceNum: p.price,
    price: wonStr(p.price),
    time: fmtTime(p.minutes),
    cuts: `원본 전체 · 보정 ${p.retouchBasic}컷`,
  });
}

function toWork(a, i) {
  return { id: a.id, cat: a.cat, title: a.title, seed: a.cover, cover: a.cover, photos: a.photos || null, h: WORK_HEIGHTS[i % WORK_HEIGHTS.length], count: a.count };
}

// 상품에 적용되는 실제 옵션 = 상품 고유 옵션 + 전역 옵션 템플릿(enabled)
function effectiveAddons(pkg) {
  const tpls = (window.KASHADB.getOptionTemplates() || []).filter((t) => t.enabled).map((t) => ({ id: t.id, label: t.label, price: t.price, source: "template" }));
  const own = ((pkg && pkg.addons) || []).map((a) => ({ id: a.id, label: a.label, price: a.price, source: "product" }));
  const seen = {}; const out = [];
  own.concat(tpls).forEach((a) => { if (!seen[a.id]) { seen[a.id] = 1; out.push(a); } });
  return out;
}

function recompute() {
  const DB = window.KASHADB;
  const sd = DB.getSiteData() || {};
  const packages = DB.getPackages().filter((p) => p.active).map(toWebPackage);
  const works = DB.getAlbums().filter((a) => a.published).map(toWork);
  Object.assign(window, {
    PACKAGES: packages,
    WORKS: works,
    STUDIO: DB.getStudio(),
    SITE_ASSETS: DB.getSiteAssets(),
    CATEGORIES: ["전체", ...(sd.albumCats || [])],
    SERVICES: sd.services || SERVICES,
    PROCESS: sd.process || PROCESS,
    REVIEWS: sd.reviews || REVIEWS,
    FAQ: sd.faq || FAQ,
    PLACES: sd.places || ["성수 스튜디오"],
    OPTION_TEMPLATES: DB.getOptionTemplates(),
  });
}

recompute(); // 초기 1회

// 루트에서 호출하는 동기화 훅: 스토어 구독 + 표시용 데이터 동기화
// (window에 직접 대입 — Babel standalone 스코프 이슈 방지)
window.KASHA_SYNC = function () {
  window.KASHADB.useStore();
  recompute();
};

Object.assign(window, {
  DS, img, pimg, wonStr, fmtTime, albumPhotos, effectiveAddons,
  CATEGORIES, PAYMENT_METHODS, SERVICES, PROCESS, REVIEWS, FAQ,
});
