<?php
$finance_active = 'gen';
$finance_group = 'billing';
$page_title = 'إعداد دورة الفوترة';
$UA_FORCE_DESIGN_V2 = true;
$UA_PAGE_CSS = ['assets/css/invoices_generate_month_exceptional.css'];
$uaAndroidInvoicesGenerate = ((string)($_GET['ua_android'] ?? '') === '1') || stripos((string)($_SERVER['HTTP_USER_AGENT'] ?? ''), 'NetworkCustomersAndroid/') !== false;
if ($uaAndroidInvoicesGenerate) $UA_PAGE_CSS[] = 'assets/css/android_invoices_generate_month.css';
require_once __DIR__ . '/header.php';
require_once __DIR__ . '/sidebar.php';
require_once __DIR__ . '/auth.php';
require_once __DIR__ . '/billing_cycle_lib.php';
require_login('login.php');
if (function_exists('require_perm')) @require_perm('can_settings');

billing_cycle_migrate($conn);
$msg = '';
$error = '';
if (empty($_SESSION['billing_exceptional_cycle_token'])) {
  $_SESSION['billing_exceptional_cycle_token'] = bin2hex(random_bytes(24));
}
$exceptionalCycleToken = (string)$_SESSION['billing_exceptional_cycle_token'];

if (($_SERVER['REQUEST_METHOD'] ?? 'GET') === 'POST' && (string)($_POST['action'] ?? '') === 'create_exceptional_cycle') {
  try {
    if (function_exists('ua_csrf_verify') && !ua_csrf_verify()) throw new RuntimeException('انتهت صلاحية الطلب. أعد تحميل الصفحة ثم حاول مجدداً.');
    $submittedToken = trim((string)($_POST['request_token'] ?? ''));
    if ($submittedToken === '' || !hash_equals($exceptionalCycleToken, $submittedToken)) throw new RuntimeException('تعذر التحقق من طلب الدورة الاستثنائية.');
    $actorId = (int)($_SESSION['admin_id'] ?? $_SESSION['admin_user_id'] ?? $_SESSION['user_id'] ?? 0);
    $exceptionalResult = billing_create_exceptional_cycle($conn, $actorId, trim((string)($_POST['exceptional_cycle_label'] ?? '')), $submittedToken);
    $queuedResult = billing_queue_requests($conn);
    if (empty($exceptionalResult['ok'])) throw new RuntimeException((string)($exceptionalResult['error'] ?? 'تعذر إنشاء الدورة الاستثنائية.'));
    $_SESSION['billing_exceptional_cycle_token'] = bin2hex(random_bytes(24));
    $exceptionalCycleToken = (string)$_SESSION['billing_exceptional_cycle_token'];
    $msg = 'تم إنشاء الدورة الاستثنائية فوراً: ' . (int)($exceptionalResult['created'] ?? 0) . ' فاتورة. لم يتغير موعد الدورة التلقائية.';
  } catch (Throwable $e) {
    $error = $e->getMessage();
  }
} elseif (isset($_POST['save_cycle'])) {
  set_app_setting($conn, 'billing_cycle_day', (string)min(28, max(1, (int)($_POST['billing_cycle_day'] ?? 1))));
  set_app_setting($conn, 'billing_generation_lead_days', (string)min(28, max(0, (int)($_POST['billing_generation_lead_days'] ?? 3))));
  set_app_setting($conn, 'billing_due_after_days', (string)max(0, (int)($_POST['billing_due_after_days'] ?? 0)));
  set_app_setting($conn, 'grace_days', (string)max(0, (int)($_POST['grace_days'] ?? 0)));
  set_app_setting($conn, 'limit_after_days', (string)max(0, (int)($_POST['limit_after_days'] ?? 0)));
  set_app_setting($conn, 'cut_after_days', (string)max(0, (int)($_POST['cut_after_days'] ?? 0)));
  set_app_setting($conn, 'billing_skip_limit_stage', isset($_POST['billing_skip_limit_stage']) ? '1' : '0');
  set_app_setting($conn, 'billing_request_retention_days', (string)max(1, (int)($_POST['billing_request_retention_days'] ?? 3)));
  set_app_setting($conn, 'automation_invoices_enabled', isset($_POST['automation_invoices_enabled']) ? '1' : '0');
  set_app_setting($conn, 'automation_cut_enabled', isset($_POST['automation_cut_enabled']) ? '1' : '0');

  header('Location: invoices_generate_month.php?saved=1');
  exit;
}

if (isset($_GET['saved']) && $_GET['saved'] === '1') {
  $msg = 'تم حفظ إعدادات دورة الفوترة والموافقات ✅';
}

$cfg = billing_get_settings($conn);
$cycle = billing_current_cycle($conn);
$payload = billing_get_alert_payload($conn);
$recentExceptionalCycles = billing_recent_exceptional_cycles($conn, 4);

if (!function_exists('h')) {
  function h($s){ return htmlspecialchars((string)$s, ENT_QUOTES, 'UTF-8'); }
}
?>
<div class="content-wrapper ua-extracted-page">
  <section class="content-header">
    <div class="container-fluid d-flex justify-content-between align-items-center">
      <h1 class="mb-0">إعداد دورة الفوترة</h1>
      <a href="invoices.php" class="btn btn-secondary"><i class="fa fa-arrow-right"></i> رجوع</a>
    </div>
  </section>

  <section class="content">
    <div class="container-fluid">
      <?php include __DIR__ . '/finance_tabs.php'; ?>

      <?php if($msg){ ?>
        <div class="alert alert-success"><?= h($msg) ?></div>
      <?php } ?>
      <?php if($error){ ?>
        <div class="alert alert-danger"><?= h($error) ?></div>
      <?php } ?>

      <div class="card ua-cycle-card">
        <div class="card-body ua-cycle-body">
          <form class="ua-cycle-form" method="post" action="invoices_generate_month.php" autocomplete="off">
            <div class="ua-cycle-grid" aria-label="إعدادات أيام دورة الفوترة">
              <div class="ua-cycle-field">
                <label>يوم بداية الشهر للمستخدم</label>
                <input class="form-control" type="number" min="1" max="28" name="billing_cycle_day" value="<?= (int)$cfg['cycle_day'] ?>">
              </div>
              <div class="ua-cycle-field">
                <label>بعد كم يوم يصبح الاستحقاق</label>
                <input class="form-control" type="number" min="0" name="billing_due_after_days" value="<?= (int)$cfg['due_after_days'] ?>">
              </div>
              <div class="ua-cycle-field">
                <label>إنشاء الفاتورة قبل الدورة بـ</label>
                <input class="form-control" type="number" min="0" max="28" name="billing_generation_lead_days" value="<?= (int)$cfg['generation_lead_days'] ?>">
              </div>
              <div class="ua-cycle-field ua-cycle-field--sm">
                <label>أيام السماح</label>
                <input class="form-control" type="number" min="0" name="grace_days" value="<?= (int)$cfg['grace_days'] ?>">
              </div>
              <div class="ua-cycle-field ua-cycle-field--sm">
                <label>التخفيض بعد الاستحقاق والسماح</label>
                <input class="form-control" type="number" min="0" name="limit_after_days" value="<?= (int)$cfg['limit_after_days'] ?>">
              </div>
              <div class="ua-cycle-field ua-cycle-field--sm">
                <label>القطع بعد الاستحقاق والسماح</label>
                <input class="form-control" type="number" min="0" name="cut_after_days" value="<?= (int)$cfg['cut_after_days'] ?>">
              </div>
              <div class="ua-cycle-field ua-cycle-field--sm">
                <label>تنبيه السوبر أدمن للطلب القديم</label>
                <input class="form-control" type="number" min="1" name="billing_request_retention_days" value="<?= (int)$cfg['request_retention_days'] ?>">
              </div>
            </div>

            <div class="ua-cycle-controls">
              <div class="ua-cycle-checks" aria-label="خيارات التشغيل التلقائي">
                <label class="ua-cycle-check" for="automation_invoices_enabled">
                  <input class="form-check-input" type="checkbox" id="automation_invoices_enabled" name="automation_invoices_enabled" <?= $cfg['automation_invoices_enabled'] ? 'checked' : '' ?>>
                  <span>تفعيل توليد الفواتير التلقائي</span>
                </label>
                <label class="ua-cycle-check" for="automation_cut_enabled">
                  <input class="form-check-input" type="checkbox" id="automation_cut_enabled" name="automation_cut_enabled" <?= $cfg['automation_cut_enabled'] ? 'checked' : '' ?>>
                  <span>تفعيل إنشاء طلبات الموافقة</span>
                </label>
                <label class="ua-cycle-check" for="billing_skip_limit_stage">
                  <input class="form-check-input" type="checkbox" id="billing_skip_limit_stage" name="billing_skip_limit_stage" <?= $cfg['skip_limit_stage'] ? 'checked' : '' ?>>
                  <span>تجاوز التخفيض والبدء بمرحلة القطع</span>
                </label>
              </div>
              <button class="btn btn-primary ua-cycle-save" type="submit" name="save_cycle"><i class="fa fa-save"></i> حفظ الإعدادات</button>
            </div>
          </form>

          <hr class="ua-cycle-sep">

          <div class="ua-cycle-summary" aria-label="ملخص الدورة الحالية">
            <div class="ua-cycle-summary-cell">
              <div><b>الدورة الحالية:</b> <?= h($cycle['label']) ?></div>
              <div><b>تاريخ الاستحقاق:</b> <?= h($cycle['due_date']) ?></div>
            </div>
            <div class="ua-cycle-summary-cell">
              <div><b>فواتير الدورة الحالية:</b> <?= (int)($payload['generated_count'] ?? 0) ?></div>
              <div><b>رسائل التسديد المعلقة:</b> <?= (int)($payload['pending']['reminder'] ?? 0) ?> — <b>طلبات التخفيض:</b> <?= (int)($payload['pending']['limit'] ?? 0) ?> — <b>طلبات القطع:</b> <?= (int)($payload['pending']['cut'] ?? 0) ?></div>
            </div>
          </div>

          <section class="ua-exceptional-cycle" aria-labelledby="uaExceptionalCycleTitle">
            <div class="ua-exceptional-cycle__intro">
              <span><i class="fa fa-bolt"></i> دورة مستقلة</span>
              <h2 id="uaExceptionalCycleTitle">إنشاء دورة فواتير استثنائية</h2>
              <p>تنشئ الفواتير فوراً وتبدأ المهل المحفوظة للرسائل والتخفيض والقطع، من دون تقديم أو تأخير الدورة التلقائية.</p>
            </div>
            <form method="post" id="uaExceptionalCycleForm">
              <?php if (function_exists('ua_csrf_field')) ua_csrf_field(); ?>
              <input type="hidden" name="action" value="create_exceptional_cycle">
              <input type="hidden" name="request_token" value="<?= h($exceptionalCycleToken) ?>">
              <label><span>اسم اختياري للدورة</span><input name="exceptional_cycle_label" maxlength="80" placeholder="مثال: دورة تسوية استثنائية"></label>
              <button type="submit"><i class="fa fa-bolt"></i><span>إنشاء الدورة الآن</span><small>لجميع المشتركين النشطين</small></button>
            </form>
            <div class="ua-exceptional-cycle__facts">
              <span><i class="fa fa-calendar-check-o"></i><b>الاستحقاق</b><small>بعد <?= (int)$cfg['due_after_days'] ?> يوم</small></span>
              <span><i class="fa fa-hourglass-half"></i><b>السماح</b><small><?= (int)$cfg['grace_days'] ?> يوم</small></span>
              <span><i class="fa fa-shield"></i><b>الموافقات</b><small>الرسائل والإجراءات لا تُنفذ مباشرة</small></span>
              <a href="automation_billing.php#exceptional"><i class="fa fa-calendar"></i> عرض المخطط الكامل</a>
            </div>
            <?php if ($recentExceptionalCycles): ?>
              <div class="ua-exceptional-cycle__recent"><b>آخر دورة:</b><span><?= h($recentExceptionalCycles[0]['label'] ?? '') ?></span><em><?= (int)($recentExceptionalCycles[0]['created_invoices'] ?? 0) ?> فاتورة</em></div>
            <?php endif; ?>
          </section>

          <div class="alert alert-info ua-cycle-note mb-0">تُنشأ فاتورة الدورة القادمة قبل بدايتها بالمدة المحددة، ويُخصم الرصيد المقدم تلقائياً. إرسال رسائل التسديد والتخفيض والقطع لا يتم إلا بعد موافقة السوبر أدمن من كرت التنبيهات.</div>
        </div>
      </div>
    </div>
  </section>
</div>

<script>
(function(){
  try {
    if ('scrollRestoration' in history) {
      history.scrollRestoration = 'manual';
    }
    window.addEventListener('load', function () {
      window.scrollTo({ top: 0, left: 0, behavior: 'auto' });
    });
  } catch (e) {}
  var exceptionalForm = document.getElementById('uaExceptionalCycleForm');
  if (exceptionalForm) exceptionalForm.addEventListener('submit', function(event){
    if (exceptionalForm.dataset.confirmed === '1') return;
    event.preventDefault();
    var message = 'سيتم إنشاء فواتير فوراً لجميع المشتركين النشطين وبدء المهل المحفوظة، دون تغيير الدورة التلقائية.';
    var finish = function(ok){
      if (!ok) return;
      exceptionalForm.dataset.confirmed = '1';
      exceptionalForm.classList.add('is-submitting');
      var button = exceptionalForm.querySelector('button[type="submit"]');
      if (button) { button.disabled = true; button.querySelector('span').textContent = 'جارٍ إنشاء الدورة'; }
      exceptionalForm.submit();
    };
    if (typeof window.uaConfirm === 'function') window.uaConfirm('إنشاء دورة فواتير استثنائية', message, {confirmText:'إنشاء الدورة',cancelText:'إلغاء',kind:'warning'}).then(finish);
    else finish(window.confirm(message));
  });
})();
</script>

<?php require_once __DIR__ . '/footer.php'; ?>
