// extract-printed-page-numbers.js
// يقرأ رأس كل صفحة (أعلى 8% من الصورة) ويستخرج رقم الصفحة المطبوع بالعربية
// لحل مشكلة الإزاحة المتغيرة بين رقم PDF والرقم المطبوع الحقيقى.
//
// الاستخدام: node scripts/extract-printed-page-numbers.js <volume_id>

import { execSync } from 'node:child_process';
import { existsSync, readFileSync, writeFileSync, unlinkSync } from 'node:fs';
import db from '../db.js';

const volumeId = parseInt(process.argv[2] || '1', 10);

// تحويل الأرقام العربية الهندية والعربية الشرقية إلى أرقام لاتينية لتسهيل الفرز والمطابقة
function arabicToLatinDigits(s) {
  if (!s) return null;
  const map = { '٠':'0','١':'1','٢':'2','٣':'3','٤':'4','٥':'5','٦':'6','٧':'7','٨':'8','٩':'9' };
  return s.replace(/[٠-٩]/g, d => map[d] || d);
}

function extractPageNumberFromHeader(imagePath) {
  const cropPath = imagePath.replace('.jpg', '_header_crop.png');
  try {
    // قص أعلى 8% من الصفحة فقط (منطقة رقم الصفحة فى الترويسة) باستخدام PIL
    execSync(`python3 -c "
from PIL import Image
img = Image.open('${imagePath}')
w, h = img.size
crop = img.crop((0, 0, w, int(h*0.09)))
crop = crop.resize((crop.width*2, crop.height*2))
crop.save('${cropPath}')
"`, { stdio: 'pipe' });

    const outBase = cropPath.replace('.png', '');
    execSync(`tesseract "${cropPath}" "${outBase}" -l ara --psm 7 -c tessedit_char_whitelist=٠١٢٣٤٥٦٧٨٩` , { stdio: 'pipe' });
    const text = readFileSync(`${outBase}.txt`, 'utf-8').trim();

    // تنظيف: استخراج فقط الأرقام العربية المتتالية
    const digitsOnly = (text.match(/[٠-٩]+/g) || []).join('');

    try { unlinkSync(cropPath); } catch {}
    try { unlinkSync(`${outBase}.txt`); } catch {}

    return digitsOnly || null;
  } catch (e) {
    return null;
  }
}

async function main() {
  const pages = db.prepare(`
    SELECT id, pdf_page_number, image_path
    FROM pages WHERE volume_id = ? ORDER BY pdf_page_number
  `).all(volumeId);

  console.log(`📄 استخراج أرقام الصفحات المطبوعة لـ ${pages.length} صفحة...`);

  const updateStmt = db.prepare(`UPDATE pages SET printed_page_number = ? WHERE id = ?`);
  let found = 0;

  for (const page of pages) {
    const fullImagePath = '/home/claude/archive-platform/server/uploads/pages' +
      page.image_path.replace('/media', '');

    if (!existsSync(fullImagePath)) {
      console.log(`   ⚠️  صفحة ${page.pdf_page_number}: الملف غير موجود`);
      continue;
    }

    const printedNum = extractPageNumberFromHeader(fullImagePath);
    if (printedNum) {
      updateStmt.run(printedNum, page.id);
      found++;
      console.log(`   ✓ PDF ${page.pdf_page_number} → مطبوعة "${printedNum}"`);
    } else {
      console.log(`   ✗ PDF ${page.pdf_page_number} → لم يُستخرج رقم`);
    }
  }

  console.log(`\n✅ تم استخراج ${found} من ${pages.length} رقم صفحة مطبوع`);
}

main().catch(err => {
  console.error('خطأ:', err);
  process.exit(1);
});
