@php
    $boxCounter = app(\App\Support\GradingMarkBoxCounter::class);
    // 按当前试卷真实题目动态生成判题卡条目（题量与方框数）
    $scanSheetItems = [];
    $countBlanks = fn($text): int => $boxCounter->countFillBlanks($text);
    $countAnswerBoxes = fn($stem = '', $solution = ''): int => $boxCounter->countAnswerMarkBoxes($stem, $solution);

    foreach (($questions['choice'] ?? []) as $q) {
        $scanSheetItems[] = ['no' => (int) ($q->question_number ?? 0), 'box_count' => 1];
    }
    foreach (($questions['fill'] ?? []) as $q) {
        $stemText = (string) ($q->question_text ?? '');
        if ($stemText === '') {
            // 兼容旧链路：部分历史对象仅有 content 字段
            $stemText = (string) ($q->content ?? '');
        }
        $scanSheetItems[] = [
            'no' => (int) ($q->question_number ?? 0),
            'box_count' => $countBlanks($stemText),
        ];
    }
    foreach (($questions['answer'] ?? []) as $q) {
        $stemText = (string) ($q->question_text ?? '');
        if ($stemText === '') {
            // 兼容旧链路：部分历史对象仅有 content 字段
            $stemText = (string) ($q->content ?? '');
        }
        $scanSheetItems[] = [
            'no' => (int) ($q->question_number ?? 0),
            'box_count' => $countAnswerBoxes($stemText, $q->solution ?? ''),
        ];
    }

    usort($scanSheetItems, static function ($a, $b) {
        return ($a['no'] <=> $b['no']);
    });
    $scanSheetItems = array_values(array_filter($scanSheetItems, static function ($item) {
        return (int) ($item['no'] ?? 0) > 0;
    }));

    $assembleTypeLabel = $pdfMeta['assemble_type_label'] ?? null;
    $showAssembleType = !empty($assembleTypeLabel) && $assembleTypeLabel !== '未知类型';
    $scanPaperCode = (string) ($pdfMeta['paper_id_num'] ?? $pdfMeta['exam_code'] ?? '');
    if ($scanPaperCode === '' && !empty($paper->paper_id)) {
        $scanPaperCode = preg_replace('/^paper_/', '', (string) $paper->paper_id) ?: (string) $paper->paper_id;
    }

    $totalItems = count($scanSheetItems);
    $leftCount = (int) ceil($totalItems / 2);
    $leftItems = array_slice($scanSheetItems, 0, $leftCount);
    $rightItems = array_slice($scanSheetItems, $leftCount);
@endphp

<div class="page scan-sheet-page" style="page-break-before: always; break-before: page; width:100%; max-width:100%; margin:0 auto; padding:0 8px; box-sizing:border-box;">
    <div class="scan-sheet-header" style="text-align:center;margin-bottom:1.5rem;border-bottom:2px solid #000;padding-bottom:1rem;">
        <div style="font-size:22px;font-weight:bold;">判题卡</div>
        @if($scanPaperCode !== '')
            <div class="scan-sheet-paper-code" style="margin-top:6px;font-size:18px;font-weight:700;letter-spacing:0.4px;">{{ $scanPaperCode }}</div>
        @endif
        <div style="display:flex;justify-content:space-between;font-size:14px;margin-top:8px;">
            <span>老师：{{ $teacher['name'] ?? '________' }}</span>
            <span>年级：@formatGrade($student['grade'] ?? '________')</span>
            @if($showAssembleType)
                <span>类型：{{ $assembleTypeLabel }}</span>
            @endif
            <span>姓名：{{ $student['name'] ?? '________' }}</span>
            <span>得分：________</span>
        </div>
    </div>
    <div class="scan-sheet-hint" style="font-size:14px;color:#444;margin-bottom:14px;line-height:1.5;">提示：请根据答案和解析进行批改，在回答正确的 □ 内划 / ，在回答错误的 □ 内打 X 或置空</div>

    <div class="scan-sheet-two-cols" style="display:flex;align-items:flex-start;gap:18px;">
        <div class="scan-sheet-col" style="flex:1 1 0;display:grid;row-gap:12px;">
            @foreach($leftItems as $item)
                @php
                    $questionNo = (int) ($item['no'] ?? 0);
                    $boxCount = max(1, (int) ($item['box_count'] ?? 1));
                @endphp
                <div class="scan-sheet-item" style="display:flex;align-items:center;min-height:24px;">
                    <span class="scan-sheet-no" style="font-weight:700;font-size:14px;line-height:1.2;white-space:nowrap;margin-right:2px;">题目 {{ $questionNo }}.</span>
                    <span class="scan-sheet-marks" style="display:inline-flex;align-items:center;gap:0;">
                        @for($i = 0; $i < $boxCount; $i++)
                            <span class="scan-grade-box" style="display:inline-block;width:21px;height:21px;border:1px solid #333;box-sizing:border-box;background:#fff;vertical-align:middle;margin-right:16px;"></span>
                        @endfor
                    </span>
                </div>
            @endforeach
        </div>

        <div class="scan-sheet-col" style="flex:1 1 0;display:grid;row-gap:12px;">
            @foreach($rightItems as $item)
                @php
                    $questionNo = (int) ($item['no'] ?? 0);
                    $boxCount = max(1, (int) ($item['box_count'] ?? 1));
                @endphp
                <div class="scan-sheet-item" style="display:flex;align-items:center;min-height:24px;">
                    <span class="scan-sheet-no" style="font-weight:700;font-size:14px;line-height:1.2;white-space:nowrap;margin-right:2px;">题目 {{ $questionNo }}.</span>
                    <span class="scan-sheet-marks" style="display:inline-flex;align-items:center;gap:0;">
                        @for($i = 0; $i < $boxCount; $i++)
                            <span class="scan-grade-box" style="display:inline-block;width:21px;height:21px;border:1px solid #333;box-sizing:border-box;background:#fff;vertical-align:middle;margin-right:16px;"></span>
                        @endfor
                    </span>
                </div>
            @endforeach
        </div>
    </div>

    @if($totalItems === 0)
        <div class="scan-sheet-empty" style="color:#888;font-size:13px;margin-top:6px;">暂无可渲染题目</div>
    @endif
</div>
