// Shape mirrors backend Postman doc for /exams:
//   exam: { id, sessionId, title, description, passScore, isActive,
//           questions: [{ id, questionText, position,
//                         options: [{ id, optionText, isCorrect }] }] }
// (Backend hides `is_correct` from non-admin reads; the admin mock shows it.)

const buildQuestion = (id, questionText, position, options, correctIndex, score = 10) => ({
  id,
  questionText,
  position,
  score,
  options: options.map((optionText, idx) => ({
    id: id * 100 + idx + 1,
    optionText,
    isCorrect: idx === correctIndex,
  })),
})

const ethicsQuestions = [
  buildQuestion(
    1,
    'کدام گزینه به مفهوم تقوا نزدیک‌تر است؟',
    1,
    ['پرهیز از خطا و دوری از گناه', 'خودنگه‌داری در محضر خداوند', 'پرهیز از خوراکی‌های مضر'],
    1
  ),
  buildQuestion(
    2,
    'منبع اصلی احکام شیعه چیست؟',
    2,
    ['قرآن و سنت اهل بیت(ع)', 'فقط قرآن کریم', 'اجماع علما'],
    0
  ),
]

const quranQuestions = [
  buildQuestion(3, 'سوره حمد چند آیه دارد؟', 1, ['۵ آیه', '۶ آیه', '۷ آیه', '۸ آیه'], 2),
  buildQuestion(
    4,
    'کدام آیه به نام آیة‌الکرسی شناخته می‌شود؟',
    2,
    ['آیه ۲۵۵ سوره بقره', 'آیه اول سوره فاتحه', 'آیه ۱۸ سوره آل عمران'],
    0
  ),
]

export const adminExams = [
  {
    id: 201,
    sessionId: 101,
    title: 'آزمون پایان فصل اول اخلاق',
    description: 'آزمون چهار گزینه‌ای از مفاهیم درس‌های ۱ تا ۳.',
    score: 20,
    minimumScore: 12,
    durationMinutes: 30,
    isRandom: false,
    isActive: true,
    questions: ethicsQuestions,
    // ── UI-only fields for ExamItem / ExamDetailsModal (not in backend). ──
    course: { id: 1, title: 'اصول اخلاق اسلامی' },
    courseTitle: 'اصول اخلاق اسلامی',
    session: { id: 101, title: 'مقدمه‌ای بر اخلاق اسلامی' },
    sessionTitle: 'مقدمه‌ای بر اخلاق اسلامی',
    questionsCount: ethicsQuestions.length,
    createdAt: '2026-04-20T08:00:00.000Z',
  },
  {
    id: 202,
    sessionId: 102,
    title: 'آزمون مفاهیم قرآنی - میان‌ترم',
    description: 'آزمون میان‌ترم برای مرور آیات کلیدی.',
    score: 20,
    minimumScore: 14,
    durationMinutes: 20,
    isRandom: false,
    isActive: true,
    questions: quranQuestions,
    course: { id: 2, title: 'مفاهیم قرآنی' },
    courseTitle: 'مفاهیم قرآنی',
    session: { id: 102, title: 'تفسیر سوره حمد' },
    sessionTitle: 'تفسیر سوره حمد',
    questionsCount: quranQuestions.length,
    createdAt: '2026-05-10T08:00:00.000Z',
  },
]

// Mirrors GET /exams/:examId/attempts. Each row is one attempt with the user
// embedded; multiple rows per user are possible.
export const examAttempts = new Map([
  [
    201,
    [
      {
        id: 14,
        examId: 201,
        score: 20,
        isPassed: true,
        correctCount: 2,
        totalQuestions: 2,
        startedAt: '2026-04-12T15:00:00+03:30',
        submittedAt: '2026-04-12T15:30:00+03:30',
        deadlineAt: '2026-04-12T15:30:00+03:30',
        user: {
          id: 100,
          name: 'فاطمه رضایی',
          email: 'fatemeh.r@example.com',
          phone: '+989121234567',
          provinceId: 8,
          cityId: 47,
          province: { id: 8, name: 'تهران' },
          city: { id: 47, provinceId: 8, name: 'تهران' },
          roles: ['student'],
          avatarUrl: null,
          avatarDownloadUrl: null,
          createdAt: '2026-02-01T10:00:00+00:00',
        },
      },
      {
        id: 15,
        examId: 201,
        score: 10,
        isPassed: false,
        correctCount: 1,
        totalQuestions: 2,
        startedAt: '2026-04-13T09:00:00+03:30',
        submittedAt: '2026-04-13T09:25:00+03:30',
        deadlineAt: '2026-04-13T09:30:00+03:30',
        user: {
          id: 102,
          name: 'مریم احمدی',
          email: 'maryam.a@example.com',
          phone: '+989121111111',
          provinceId: 15,
          cityId: 90,
          province: { id: 15, name: 'اصفهان' },
          city: { id: 90, provinceId: 15, name: 'اصفهان' },
          roles: ['student'],
          avatarUrl: null,
          avatarDownloadUrl: null,
          createdAt: '2026-02-03T10:00:00+00:00',
        },
      },
    ],
  ],
])

// Mirrors GET /exam-attempts/:id — full per-attempt review. Questions carry
// every option with isCorrect (answer key) + isSelected (what the user picked).
const reviewQuestions = (questions, selectedByQuestionId) =>
  questions.map((q) => ({
    id: q.id,
    questionText: q.questionText,
    position: q.position,
    score: q.score,
    selectedOptionId: selectedByQuestionId[q.id] ?? null,
    options: q.options.map((o) => ({
      id: o.id,
      optionText: o.optionText,
      isCorrect: o.isCorrect,
      isSelected: selectedByQuestionId[q.id] === o.id,
    })),
  }))

const examContext = {
  id: 201,
  title: 'آزمون پایان فصل اول اخلاق',
  description: null,
  score: 20,
  minimumScore: 12,
  durationMinutes: 30,
  session: {
    id: 101,
    title: 'مقدمه‌ای بر اخلاق اسلامی',
    course: {
      id: 1,
      title: 'اصول اخلاق اسلامی',
      term: { id: 1, title: 'ترم بهار ۱۴۰۵', score: 20, minimumScore: 12 },
    },
  },
}

export const examAttemptReviews = new Map([
  [
    14,
    {
      id: 14,
      examId: 201,
      userId: 100,
      user: {
        id: 100,
        name: 'فاطمه رضایی',
        phone: '+989121234567',
        roles: ['student'],
        avatarUrl: null,
      },
      score: 20,
      isPassed: true,
      correctCount: 2,
      totalQuestions: 2,
      startedAt: '2026-04-12T15:00:00+03:30',
      submittedAt: '2026-04-12T15:30:00+03:30',
      exam: examContext,
      // both answers correct (q1 → option 102, q2 → option 201)
      questions: reviewQuestions(ethicsQuestions, { 1: 102, 2: 201 }),
    },
  ],
  [
    15,
    {
      id: 15,
      examId: 201,
      userId: 102,
      user: {
        id: 102,
        name: 'مریم احمدی',
        phone: '+989121111111',
        roles: ['student'],
        avatarUrl: null,
      },
      score: 10,
      isPassed: false,
      correctCount: 1,
      totalQuestions: 2,
      startedAt: '2026-04-13T09:00:00+03:30',
      submittedAt: '2026-04-13T09:25:00+03:30',
      exam: examContext,
      // q1 correct (102), q2 wrong (203)
      questions: reviewQuestions(ethicsQuestions, { 1: 102, 2: 203 }),
    },
  ],
])

// Kept for the FE-mock-only single-participant detail endpoint (no backend yet).
export const examParticipants = new Map([
  [
    201,
    [
      {
        id: 100,
        userId: 100,
        firstName: 'فاطمه',
        lastName: 'رضایی',
        fullName: 'فاطمه رضایی',
        avatarUrl: '',
        address: { province: { name: 'تهران' }, city: { name: 'تهران' } },
        location: 'تهران، تهران',
        submittedAt: '2026-04-12T15:30:00+03:30',
        attempts: [
          {
            id: 14,
            title: 'تلاش اول',
            courseTitle: 'اصول اخلاق اسلامی',
            sessionTitle: 'مقدمه‌ای بر اخلاق اسلامی',
            date: '2026-04-12T15:30:00+03:30',
            score: 17,
            scoreTone: 'good',
          },
        ],
      },
      {
        id: 102,
        userId: 102,
        firstName: 'مریم',
        lastName: 'احمدی',
        fullName: 'مریم احمدی',
        avatarUrl: '',
        address: { province: { name: 'اصفهان' }, city: { name: 'اصفهان' } },
        location: 'اصفهان، اصفهان',
        submittedAt: '2026-04-13T09:25:00+03:30',
        attempts: [
          {
            id: 15,
            title: 'تلاش اول',
            courseTitle: 'اصول اخلاق اسلامی',
            sessionTitle: 'مقدمه‌ای بر اخلاق اسلامی',
            date: '2026-04-13T09:25:00+03:30',
            score: 9,
            scoreTone: 'bad',
          },
        ],
      },
    ],
  ],
])
