/* Phase C-2.2-fix: 회차 버튼 4-state(5-variant) 공용 유틸
 *
 * 입력:
 *   lessons  - 전체 회차 배열 (각 항목에 progress: 0~100 보유)
 *   index    - 현재 회차 인덱스
 *   context  - 'home' | 'classroom'
 *              'classroom' 에서는 next-course 사용 금지 (browse 목적이라
 *              100% 완료는 뒤에 미완료가 있어도 항상 done 으로 표시)
 *
 * 반환:
 *   { state, label }
 *     state  = 'done' | 'next-course' | 'resume' | 'start-next' | 'start-future'
 *     label  = 버튼 텍스트
 *
 * className 매핑은 컴포넌트 측에서 state → modifier 로 연결.
 * (VideoProgressCard → .s-video-action--{state}, LessonRow → .s-lesson-action--{state})
 */
function getLessonButtonState(lessons, index, context) {
  const ctx = context === 'classroom' ? 'classroom' : 'home';
  const cur = lessons && lessons[index];
  if (!cur) return { state: 'start-future', label: '시작하기' };
  const p = Number(cur.progress) || 0;

  if (p >= 100) {
    const hasLaterIncomplete = lessons.slice(index + 1).some(l => (Number(l.progress) || 0) < 100);
    if (!hasLaterIncomplete || ctx === 'classroom') {
      return { state: 'done', label: '완료' };
    }
    return { state: 'next-course', label: '다음 강의' };
  }

  if (p > 0) {
    return { state: 'resume', label: '이어보기' };
  }

  const prevAllDone = lessons.slice(0, index).every(l => (Number(l.progress) || 0) >= 100);
  return prevAllDone
    ? { state: 'start-next',   label: '시작하기' }
    : { state: 'start-future', label: '시작하기' };
}

/* ============================================================
 * 인라인 단위 테스트 (Jest 없음 — console.assert)
 * 페이지 로드 시 1회 실행, 실패 시 콘솔에만 경고
 * ============================================================ */
(function runLessonButtonStateTests() {
  if (typeof console === 'undefined') return;
  const cases = [
    /* 1. done — classroom context, 100% 이후 미완료 있어도 done */
    { lessons: [{progress:100},{progress:0}], index:0, context:'classroom',
      expect:'done',
      why:'classroom 에서는 뒤에 미완료 있어도 done (next-course 금지)' },
    /* 2. next-course — home context, 100% + 뒤에 미완료 */
    { lessons: [{progress:100},{progress:0}], index:0, context:'home',
      expect:'next-course',
      why:'home 에서는 100% + 뒤에 미완료 있으면 next-course' },
    /* 3. done — home context, 100% + 뒤에 미완료 없음 */
    { lessons: [{progress:100},{progress:100}], index:1, context:'home',
      expect:'done',
      why:'home 에서도 마지막 100% 는 done' },
    /* 4. resume — 진행중 */
    { lessons: [{progress:0},{progress:35}], index:1, context:'home',
      expect:'resume',
      why:'0 < progress < 100 은 언제나 resume' },
    /* 5. start-next — 0% + 이전 모두 완료 */
    { lessons: [{progress:100},{progress:100},{progress:0}], index:2, context:'home',
      expect:'start-next',
      why:'이전 회차 모두 100% 면 start-next' },
    /* 6. start-future — 0% + 이전 중 미완료 */
    { lessons: [{progress:100},{progress:35},{progress:0}], index:2, context:'home',
      expect:'start-future',
      why:'이전 중 미완료 있으면 start-future' },
  ];
  cases.forEach((c, i) => {
    const got = getLessonButtonState(c.lessons, c.index, c.context).state;
    console.assert(
      got === c.expect,
      `[lessonButtonState] test #${i+1} FAIL — expected ${c.expect}, got ${got}. ${c.why}`
    );
  });
})();

window.getLessonButtonState = getLessonButtonState;
