# بازسازی پست اینستاگرام — سه حالت + پست ورقه‌ای (v90)

مسیر: ادمین هوشمند ← مقصد اینستاگرام ← «📥 بازسازی پست اینستاگرام»

## ورودی
- لینک پست/ریلز، یا «📎 آپلود دستی» (عکس/ویدیو/آلبوم + متن پست). آپلود دستی مطمئن‌ترین راهه چون اینستاگرام دریافت مدیا از لینک رو مدام عوض می‌کنه.
- پست ورقه‌ای: دکمه‌های شماره‌دار برای انتخاب ورق‌ها + «همه‌ی ورق‌ها».

## حالت‌ها
1. **عکس خام** — AI (OpenAI images/edits) متن و لوگو رو حذف و پس‌زمینه رو بازسازی می‌کنه؛ خروجی بدون متن/لوگو (عکس + نسخه‌ی فایل).
2. **در قالب مقصد** — عکس خام + قالب + تیتر + کپشن مقصد؛ پیش‌نویس برای تایید (ورق‌های بعدی با همان قالب/تیتر، بعد از پیام اصلی).
3. **ویدیو** — قالب+تیتر مقصد روی تمام طول ویدیو (ffmpeg، صدا حفظ می‌شه) → فایل نهایی؛ یا «فقط کاور».

## متن داخل عکس/ویدیو
- روی پست‌ها ممکنه تیتر درشت یا فقط توضیحات نوشته شده باشه. AI (مدل بینایی) این متن‌ها رو می‌خونه (تیتر و متن جدا)، واترمارک/آیدی پیج/لوگو رو نادیده می‌گیره.
- برای ویدیو ۳ فریم (۱۵٪، ۵۰٪، ۸۵٪) بررسی می‌شه (نیازمند ffmpeg).
- متن خوانده‌شده + کپشن پست = منبع ساخت تیتر و کپشن. اگه کپشن خالی باشه و متنی داخل مدیا باشه، دیگه از کاربر متن نمی‌پرسه.
- کلید «📝 خواندن متن داخل مدیا» در صفحهٔ انتخاب حالت (پیش‌فرض روشن). برای ساخت تیتر/کپشن (حالت ۲ و ۳) استفاده می‌شه.
- مدل متنِ اتصال باید ورودی تصویر پشتیبانی کنه (مثل gpt-5-mini / gpt-4o).

## ارتقاهای v92
- **صفحهٔ هزینه قبل از اجرا**: برآورد سکه + موجودی صاحب مقصد، و گزینه‌ها؛ بعد «✅ اجرا».
- **پیش‌نمایش و تأیید** (حالت ۱ و ۳): اول پیش‌نمایش می‌آد؛ «✅ تأیید» فایل کیفیت کامل (و برای ویدیو/کاور، کپشن+هشتگ) رو می‌فرسته؛ «🔄 دوباره بساز» و برای عکس خام «📸 کپشن و هشتگ».
- **سه تیتر پیشنهادی** برای انتخاب (گزینهٔ 🔠) — برای حالت ۲ و ۳.
- **تیتر جدا برای هر ورق** در پست ورقه‌ای (حالت ۲، گزینهٔ 🔤): متن همان ورق خوانده و تیتر مخصوصش ساخته می‌شه.
- **انتخاب فریم کاور** از ۴ فریم پیشنهادی (گزینهٔ 🎞).
- **کاور با محو شدن**: فقط ۳ ثانیهٔ اول ویدیو (به‌جای تمام طول).
- **پیش‌فرض هر مقصد**: «💾 ذخیرهٔ انتخاب‌ها» حالت و گزینه‌ها رو برای آن مقصد نگه می‌داره و دفعهٔ بعد مستقیم به صفحهٔ اجرا می‌رسی؛ «🧹 حذف پیش‌فرض».
- **صف پس‌زمینه**: کار سنگین (ویدیو یا بیش از ۲ ورق) اگه کرون `ig_jobs` فعال باشه به صف می‌ره و نتیجه خودکار می‌رسه. کرون جدید `cron/ig_jobs.php` در لیست کرون‌های پنل ثبت شده (هر ۱ دقیقه). بدون کرون، کار همان لحظه داخل وب‌هوک انجام می‌شه.
- **ورودی مستقیم**: به‌جای لینک می‌تونی عکس/ویدیو رو بفرستی یا از اینستاگرام فوروارد کنی.
- **تذکر کپی‌رایت** یک‌بار برای هر کاربر.
- اجرا نشده (فقط برای ورژن دستی): «زمان‌بندی خروجی ویدیو/عکس خام برای انتشار بعدی» — ربات انتشار خودکار اینستاگرام نداره؛ حالت ۲ همان زمان‌بندی پیش‌نویس‌ها رو دارد.

## آمار و پنل وب (v93)
- **آمار در ربات**: «📊 آمار من» ← دکمهٔ «📸 بازسازی اینستاگرام»: اجرا / موفق / ناموفق / تأییدشده به تفکیک حالت + پرمصرف‌ترین مقصدها (بازه‌های امروز تا کل). رویدادها در `news_activity_log` با اکشن‌های `igr_run_*`, `igr_done_*`, `igr_fail_*`, `igr_approve_*` ثبت می‌شوند (بدون تغییر دیتابیس).
- **پنل وب**: منوی «ادمین هوشمند» ← «بازسازی اینستاگرام» (`admin/ig_rebuild.php`، دسترسی `manage_settings`):
  - تنظیمات سراسری: روشن/خاموش کردن قابلیت، استفاده از صف پس‌زمینه، حداکثر مدت ویدیو، حداکثر ورق.
  - وضعیت محیط: ffmpeg/ffprobe، proc_open، GD، اتصال تصویر AI، کرون ig_jobs و تعداد کارهای صف.
  - آمار ۱/۷/۳۰/۹۰ روزه به تفکیک حالت، مقصدهای پرمصرف و ۲۰ رویداد آخر.
- هزینهٔ سکه در همان بخش «🪙 سکه» دیده می‌شود (آمار جدا برای سکهٔ بازسازی ساخته نشد).
- رنگ دکمه‌های جدید هنوز در کاتالوگ رنگ‌بندی ثبت نشده‌اند (فقط حدس خودکار).

## فایل‌ها
- جدید: `admin/ig_rebuild.php`، `cron/ig_jobs.php`، `includes/news/ig_rebuild.php`، `includes/news/draft_extras.php`، `tests/ig_rebuild_smoke_test.php`
- تغییر: `bot/content_tools.php`، `bot/news_stats.php`، `admin/_header.php`، `includes/cron_scheduler.php`، `bot/index.php`، `includes/news/{instagram_fetch,openai_image,ai_key,compose_post,telegram,pipeline,publish,cleanup,bootstrap}.php`
- بدون تغییر دیتابیس.

## نیازها / محدودیت‌ها
- ffmpeg + ffprobe روی سرور و باز بودن `proc_open` (برای حالت ویدیو). «فقط کاور» بدون ffmpeg هم کار می‌کنه.
- اتصال تصویر باید endpoint `/images/edits` رو پشتیبانی کنه (gpt-image-1).
- دانلود از تلگرام تا ۲۰MB، ارسال تا ۵۰MB، ویدیو تا ۱۸۰ ثانیه.
- بخش‌های زیر متن/لوگو توسط AI «ساخته» می‌شن، پس دقیقاً مثل عکس اصلی نیستن.
- هر بازیابی عکس = ۱ سکه‌ی تصویر.
- باگ قدیمی رفع شد: `tg_call` تعریف نشده بود و بازسازی بعد از دریافت لینک کرش می‌کرد (→ `tg_api`).
- ⚠️ PHP در محیط توسعه نبود: کد اجرا نشده. فقط فیلتر ffmpeg واقعاً تست شد. اول `php tests/ig_rebuild_smoke_test.php` رو بزن.
