// DANOVI — 작업 데이터 (단일 소스)
// 분류는 WORK_AREAS 한 곳에서만 정의합니다. 필터 · 소개 표 · 카드 캡션이 모두 이 목록을 씁니다.
const WORK_AREAS = [
  ['브랜딩', '로고, 컬러, 서체'],
  ['상세페이지', '제품 소개 페이지의 구성과 디자인'],
  ['웹 · 앱 디자인', '홈페이지와 앱 화면'],
  ['광고 · SNS 콘텐츠', '배너, 카드뉴스, 썸네일'],
  ['인쇄물', '메뉴판, 브로슈어, 패키지, 포스터'],
  ['제품 비주얼', '제품컷과 연출컷 정리'],
];
const WORK_FIELDS = WORK_AREAS.map(a => a[0]);

const TILE = id => './wout/' + id + '.webp';
const CUT  = (id, n) => './cuts/' + id + '-' + n + '.webp';
const MUK  = f => './prototypes/muk-detail/assets/muk/' + f + '.jpg';
const LOT  = f => './assets/portfolio/lotteria/' + f + '.jpg';
const FT   = f => './assets/featured/' + f + '.webp';

/* 대표 작업 4 — 갤러리 상단 고정. note 는 실제 브랜드 오해를 막는 표기입니다. */
const FEATURED = [
  { id:'muk', field:'상세페이지', title:'묵(黙)', sub:'3대 장인 발효 장류 상세페이지', href:'./case/muk.html',
    img: FT('muk'), sq: FT('muk-sq'),
    shots: [FT('muk'), MUK('product-gochujang'), MUK('product-doenjang'), MUK('product-ganjang'), MUK('meju-detail'), MUK('hands-detail'), MUK('maker-portrait'), MUK('place-jangdok-field')] },
  { id:'lotteria', field:'브랜딩', title:'롯데리아', sub:'BITE OF SEOUL · 비공식 리브랜딩', note:'비공식 리브랜딩', href:'./case/lotteria.html',
    img: FT('lotteria'), sq: FT('lotteria-sq'),
    shots: [FT('lotteria'), LOT('01-hero-collection'), LOT('02-packaging-set'), LOT('03-hero-scene'), LOT('04-storefront'), LOT('05-interior')] },
  { id:'danobank', field:'웹 · 앱 디자인', title:'다노뱅크', sub:'모바일 뱅킹 앱 화면', href:'./case/danobank.html',
    img: FT('danobank'), sq: FT('danobank-sq'),
    shots: [FT('danobank'), FT('danobank-home'), FT('danobank-dark'), FT('danobank-card'), FT('danobank-send')] },
  { id:'dahn', field:'브랜딩', title:'DAHN 丹', sub:'향수·향초 브랜드 아이덴티티', href:'./case/dahn.html',
    img: FT('dahn'), sq: FT('dahn-sq'),
    shots: [FT('dahn'), FT('dahn-mark'), FT('dahn-perf'), FT('dahn-box')] },
].map(w => ({ ...w, pinned: true }));

/* ── 최근 작업 ─────────────────────────────────────────────────────────────
   대표 작업 바로 뒤에 옵니다. 새 작업은 여기에 넣고, 오래된 것은
   아래 ARCHIVE_RAW 로 내리면 갤러리 순서가 됩니다. */
const RECENT = [
  { id:'onggyul', field:'상세페이지', title:'ONGYUL', sub:'더블리 피부장벽 보습로션 상세페이지',
    img:'./assets/onggyul/tile.webp', sq:'./assets/onggyul/tile.webp',
    shots: ['./assets/onggyul/tile.webp'].concat(
      Array.from({length:12}, (_,i) => './assets/onggyul/' + String(i+1).padStart(2,'0') + '.webp')
    ) },
  { id:'morne', field:'상세페이지', title:'MORNĒ', sub:'Soft Square Blouse 상세페이지',
    img:'./assets/morne/tile.webp', sq:'./assets/morne/tile.webp',
    shots: ['./assets/morne/tile.webp'].concat(
      Array.from({length:13}, (_,i) => './assets/morne/' + String(i+1).padStart(2,'0') + '.webp')
    ) },
  { id:'onggi', field:'상세페이지', title:'온기 베이커리', sub:'겉바속촉 버터 스콘 상세페이지',
    img:'./assets/scone/tile.webp', sq:'./assets/scone/tile.webp',
    shots: ['./assets/scone/tile.webp'].concat(
      Array.from({length:12}, (_,i) => './assets/scone/' + String(i+1).padStart(2,'0') + '.webp')
    ) },
  { id:'mia-invite', field:'인쇄물', title:"Mia's Birthday Picnic", sub:'생일 파티 초대장',
    img:'./assets/print/invite-tile.webp', sq:'./assets/print/invite-tile.webp',
    shots:['./assets/print/invite-tile.webp', './assets/print/invite.webp'] },
  { id:'northline-menu', field:'인쇄물', title:'NORTHLINE COFFEE', sub:'카페 메뉴판 · BRINKS',
    img:'./assets/print/menu-tile.webp', sq:'./assets/print/menu-tile.webp',
    shots:['./assets/print/menu-tile.webp', './assets/print/menu.webp'] },
  { id:'morrow-poster', field:'인쇄물', title:'MORROW BAKEHOUSE', sub:'베이커리 팝업 포스터',
    img:'./assets/print/poster-tile.webp', sq:'./assets/print/poster-tile.webp',
    shots:['./assets/print/poster-tile.webp', './assets/print/poster.webp'] },
  { id:'cinema-picks', field:'광고 · SNS 콘텐츠', title:'90–00초반 영화 모음집', sub:'인스타그램 피드 캠페인 4컷',
    img:'./assets/insta/tile.webp', sq:'./assets/insta/tile.webp',
    shots:['./assets/insta/tile.webp', './assets/insta/01.webp', './assets/insta/02.webp', './assets/insta/03.webp', './assets/insta/04.webp'] },
  { id:'eira', field:'웹 · 앱 디자인', title:'EIRA', sub:'프래그런스·바디케어 브랜드 사이트',
    img:'./assets/eira/eira-tile.webp', sq:'./assets/eira/eira-tile.webp',
    shots:['./assets/eira/eira-tile.webp', './assets/eira/eira.webp'] },
  { id:'odette', field:'웹 · 앱 디자인', title:'ODETTE', sub:'드레스 브랜드 온라인 스토어',
    img:'./assets/odette/tile.webp', sq:'./assets/odette/tile.webp',
    shots:['./assets/odette/tile.webp', './assets/odette/full.webp'] },
];

const ARCHIVE_RAW = [
  { id:'kogetsu',           field:'인쇄물',        title:'KŌGETSU',            sub:'한국적 와비사비 메뉴판', cuts:2 },
  { id:'aurea',             field:'제품 비주얼',    title:'Aurea',              sub:'주얼리 캠페인 5컷', cuts:5 },
  { id:'urban-kit',         field:'상세페이지',     title:'72H Urban Kit',      sub:'도시 재난 키트 6모듈', cuts:6 },
  { id:'midnight-blue',     field:'인쇄물',        title:'MIDNIGHT BLUE',      sub:'재즈 페스티벌 포스터', cuts:1 },
  { id:'necklace',          field:'제품 비주얼',    title:'Gold Pendant',       sub:'주얼리 착용컷', cuts:4 },
  { id:'future-signal',     field:'광고 · SNS 콘텐츠', title:'FUTURE SIGNAL 2026', sub:'테크 컨퍼런스', cuts:1 },
  { id:'pacific-taco',      field:'인쇄물',        title:'PACIFIC TACO CLUB',  sub:'메뉴판 · 라벨', cuts:5 },
  { id:'atelier-27',        field:'인쇄물',        title:'ATELIER 27',         sub:'건축 · 부동산 인쇄물', cuts:1 },
  { id:'cordless-vacuum',   field:'상세페이지',     title:'코드리스 청소기',      sub:'프리미엄 홈 어플라이언스', cuts:1 },
  { id:'between-forms',     field:'인쇄물',        title:'BETWEEN FORMS',      sub:'현대 조각 전시 포스터', cuts:1 },
  { id:'vaggverk',          field:'브랜딩',        title:'VÄGGVERK',           sub:'제품 리브랜딩', cuts:5 },
  { id:'slow-jeju',         field:'인쇄물',        title:'SLOW JEJU',          sub:'여행 브로슈어', cuts:1 },
  { id:'supplement',        field:'상세페이지',     title:'Vita Gummy',         sub:'비타민 서플리먼트', cuts:1 },
  { id:'mangwon-bookfair',  field:'인쇄물',        title:'망원 독립책장',        sub:'북페어 인쇄물 3종', cuts:3 },
  { id:'hojak',             field:'광고 · SNS 콘텐츠', title:'HOJAK',             sub:'15초 세로 광고', cuts:4 },
  { id:'nova',              field:'상세페이지',     title:'NOVA 75 Pro',        sub:'기계식 키보드', cuts:1 },
  { id:'midnight-signals',  field:'인쇄물',        title:'MIDNIGHT SIGNALS',   sub:'포스터 · 전단 · 티켓', cuts:3 },
  { id:'tiny-lab',          field:'광고 · SNS 콘텐츠', title:'TINY LAB',          sub:'어린이 과학 탐험대', cuts:1 },
  { id:'gyeolbit',          field:'제품 비주얼',    title:'GYEOLBIT',           sub:'스킨케어 연출컷', cuts:3 },
  { id:'veil',              field:'제품 비주얼',    title:'VEIL',               sub:'제품 연출컷 세트', cuts:5 },
  { id:'poster-yupddeok',   field:'광고 · SNS 콘텐츠', title:'엽떡 × 마라',        sub:'Limited Edition', cuts:1 },
  { id:'damso-dosirak',     field:'상세페이지',     title:'담소 도시락',         sub:'스테인리스 2단', cuts:1 },
  { id:'korean-furniture',  field:'상세페이지',     title:'Oak Dining Table',   sub:'원목 가구', cuts:1 },
  { id:'aera-mobile',       field:'광고 · SNS 콘텐츠', title:'AERA',              sub:'스파클링 라임 워터', cuts:1 },
  { id:'petit-fox',         field:'인쇄물',        title:'PETIT FOX BAKERY',   sub:'캐릭터 · 패키지 인쇄물', cuts:2 },
  { id:'night-roast',       field:'인쇄물',        title:'NIGHT ROAST',        sub:'카페 메뉴판', cuts:1 },
  { id:'lardo',             field:'웹 · 앱 디자인',  title:'LARDO',              sub:'이탈리안 파인 다이닝', cuts:1 },
  { id:'archive-88',        field:'웹 · 앱 디자인',  title:'ARCHIVE 88',         sub:'90s 인터넷', cuts:1 },
  { id:'northline',         field:'웹 · 앱 디자인',  title:'NORTHLINE',          sub:'커피 구독 스토어', cuts:1 },
  { id:'ebook',             field:'인쇄물',        title:'개발자 없이 홈페이지를 만든다고?', sub:'전자책 표지 · 내지', href:'./ebook.html', imgPos:'top',
    img:'./assets/ebook/cover.webp',
    shots:['./assets/ebook/cover.webp', './assets/ebook/in-use.webp', './assets/ebook/in-part04.webp', './assets/ebook/in-industry.webp', './assets/ebook/in-check.webp'] },
];

/* 원본 전체 아트워크 — 타일과 함께 오버레이에 넣습니다.
   zip(DANOVI-내자산)의 원본에서 추출·최적화했습니다. 단일컷 작업은 이 한 장이 전부입니다. */
const FULL = {
  'midnight-blue':   './assets/full/midnight-blue.webp',
  'future-signal':   './assets/full/future-signal.webp',
  'atelier-27':      './assets/full/atelier-27.webp',
  'cordless-vacuum': './assets/full/cordless-vacuum.webp',
  'between-forms':   './assets/full/between-forms.webp',
  'slow-jeju':       './assets/full/slow-jeju.webp',
  'supplement':      './assets/full/supplement.webp',
  'tiny-lab':        './assets/full/tiny-lab.webp',
  'poster-yupddeok': './assets/full/poster-yupddeok.webp',
  'damso-dosirak':   './assets/full/damso-dosirak.webp',
  'korean-furniture':'./assets/full/korean-furniture.webp',
  'aera-mobile':     './assets/full/aera-mobile.webp',
  'night-roast':     './assets/full/night-roast.webp',
  'lardo':           './assets/full/lardo.webp',
  'archive-88':      './assets/full/archive-88.webp',
  'northline':       './assets/full/northline.webp',
  'nova':            './assets/full/nova.webp',
};

const ARCHIVE = ARCHIVE_RAW.map(w => {
  const shots = [TILE(w.id)];
  for (let i = 2; i <= w.cuts; i++) shots.push(CUT(w.id, i));
  // 원본 전체컷을 두 번째에 둡니다 — 타일 다음이 "이 작업의 전부"입니다.
  if (FULL[w.id]) shots.splice(1, 0, FULL[w.id]);
  return { ...w, img: w.img || TILE(w.id), sq: w.sq, shots };
});

const GALLERY = FEATURED.concat(RECENT, ARCHIVE);
const countField = f => GALLERY.filter(w => w.field === f).length;

/* 카드 캡션 — 작업마다 같은 형식: 브랜드명 · 분류 */
const caption = w => w.field;

Object.assign(window, { WORK_AREAS, WORK_FIELDS, FEATURED, RECENT, ARCHIVE, GALLERY, TILE, CUT, countField, caption });
