<?php
require_once __DIR__ . '/../includes/functions.php';
require_once __DIR__ . '/../includes/xlsx_reader.php';
require_role('admin');

$error = '';
$summary = null;

if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['xlsx_file'])) {
    verify_csrf();

    $file = $_FILES['xlsx_file'];
    if ($file['error'] !== UPLOAD_ERR_OK) {
        $error = 'خطا در آپلود فایل. دوباره تلاش کنید.';
    } else {
        $ext = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION));
        if ($ext !== 'xlsx') {
            $error = 'فقط فایل با فرمت xlsx پذیرفته می‌شود (خروجی Excel، LibreOffice یا Google Sheets).';
        } else {
            try {
                $tmpPath = $file['tmp_name'];
                $workbook = xlsx_read_workbook($tmpPath);

                $rowsAdded = 0; $rowsUpdated = 0;
                $capsAdded = 0; $capsUpdated = 0;
                $warnings = [];

                // ------------------------------------------------------------
                // پردازش شیت «ردیف‌های درمانی»
                // ------------------------------------------------------------
                $rowsSheetName = null;
                foreach (array_keys($workbook) as $sheetName) {
                    if (mb_strpos($sheetName, 'ردیف') !== false) { $rowsSheetName = $sheetName; break; }
                }

                if ($rowsSheetName) {
                    $sheet = $workbook[$rowsSheetName];
                    foreach ($sheet as $i => $rowData) {
                        if ($i === 0) continue; // سطر هدر
                        $name = xlsx_cell($rowData, 0);
                        if ($name === '') continue;

                        $amountRaw = xlsx_cell($rowData, 1);
                        $amount = (float)preg_replace('/[^0-9]/', '', $amountRaw);
                        $docs = xlsx_cell($rowData, 2);
                        $desc = xlsx_cell($rowData, 3);

                        $stmt = $pdo->prepare("SELECT id FROM insurance_rows WHERE name = ? LIMIT 1");
                        $stmt->execute([$name]);
                        $existing = $stmt->fetch();

                        if ($existing) {
                            $upd = $pdo->prepare("UPDATE insurance_rows SET max_amount = ?, required_documents = ?, description = ? WHERE id = ?");
                            $upd->execute([$amount, $docs, $desc, $existing['id']]);
                            $rowsUpdated++;
                        } else {
                            $ins = $pdo->prepare("INSERT INTO insurance_rows (name, max_amount, required_documents, description, sort_order) VALUES (?, ?, ?, ?, 99)");
                            $ins->execute([$name, $amount, $docs, $desc]);
                            $rowsAdded++;
                        }
                    }
                } else {
                    $warnings[] = 'شیت «ردیف‌های درمانی» در فایل پیدا نشد.';
                }

                // ------------------------------------------------------------
                // پردازش شیت «سقف‌های ترکیبی»
                // ------------------------------------------------------------
                $capsSheetName = null;
                foreach (array_keys($workbook) as $sheetName) {
                    if (mb_strpos($sheetName, 'سقف') !== false) { $capsSheetName = $sheetName; break; }
                }

                if ($capsSheetName) {
                    $sheet = $workbook[$capsSheetName];
                    foreach ($sheet as $i => $rowData) {
                        if ($i === 0) continue;
                        $name = xlsx_cell($rowData, 0);
                        if ($name === '') continue;

                        $amountRaw = xlsx_cell($rowData, 1);
                        $amount = (float)preg_replace('/[^0-9]/', '', $amountRaw);
                        $relatedRaw = xlsx_cell($rowData, 2);
                        $desc = xlsx_cell($rowData, 3);

                        $relatedNames = array_filter(array_map('trim', preg_split('/[,،]/u', $relatedRaw)));
                        $rowIds = [];
                        foreach ($relatedNames as $rn) {
                            $stmt = $pdo->prepare("SELECT id FROM insurance_rows WHERE name = ? LIMIT 1");
                            $stmt->execute([$rn]);
                            $r = $stmt->fetch();
                            if ($r) {
                                $rowIds[] = $r['id'];
                            } else {
                                $warnings[] = "در سقف «$name»، ردیف «$rn» پیدا نشد و نادیده گرفته شد.";
                            }
                        }

                        $stmt = $pdo->prepare("SELECT id FROM combined_caps WHERE name = ? LIMIT 1");
                        $stmt->execute([$name]);
                        $existingCap = $stmt->fetch();

                        if ($existingCap) {
                            $capId = $existingCap['id'];
                            $upd = $pdo->prepare("UPDATE combined_caps SET max_amount = ?, description = ? WHERE id = ?");
                            $upd->execute([$amount, $desc, $capId]);
                            $del = $pdo->prepare("DELETE FROM combined_cap_rows WHERE cap_id = ?");
                            $del->execute([$capId]);
                            $capsUpdated++;
                        } else {
                            $ins = $pdo->prepare("INSERT INTO combined_caps (name, max_amount, description) VALUES (?, ?, ?)");
                            $ins->execute([$name, $amount, $desc]);
                            $capId = $pdo->lastInsertId();
                            $capsAdded++;
                        }

                        if ($rowIds) {
                            $insRel = $pdo->prepare("INSERT IGNORE INTO combined_cap_rows (cap_id, row_id) VALUES (?, ?)");
                            foreach ($rowIds as $rid) {
                                $insRel->execute([$capId, $rid]);
                            }
                        }
                    }
                } else {
                    $warnings[] = 'شیت «سقف‌های ترکیبی» در فایل پیدا نشد (اگر سقف ترکیبی ندارید مشکلی نیست).';
                }

                log_activity($pdo, 'import_xlsx', "ردیف: $rowsAdded جدید/$rowsUpdated بروزرسانی، سقف: $capsAdded جدید/$capsUpdated بروزرسانی");

                $summary = [
                    'rows_added' => $rowsAdded,
                    'rows_updated' => $rowsUpdated,
                    'caps_added' => $capsAdded,
                    'caps_updated' => $capsUpdated,
                    'warnings' => $warnings,
                ];
            } catch (Exception $e) {
                $error = 'خطا در پردازش فایل: ' . $e->getMessage();
            }
        }
    }
}

$page_title = 'ایمپورت از اکسل';
include __DIR__ . '/../includes/header.php';
?>

<h4 class="mb-4">ایمپورت ردیف‌های درمانی و سقف‌ها از فایل اکسل</h4>

<div class="card p-4 mb-4">
  <p>مراحل کار:</p>
  <ol>
    <li>فایل قالب را دانلود کنید و در Excel، LibreOffice یا Google Sheets باز کنید.</li>
    <li>مقادیر نمونه را با اطلاعات واقعی شرکت خودتان جایگزین کنید (یا ردیف/سقف جدید اضافه کنید).</li>
    <li>فایل را با فرمت <strong>xlsx</strong> ذخیره کرده و همینجا آپلود کنید.</li>
  </ol>
  <a href="<?= base_url('assets/templates/insurance-rows-template.xlsx') ?>" class="btn btn-outline-primary"><?= icon('download') ?> دانلود قالب اکسل</a>
</div>

<?php if ($error): ?><div class="alert alert-danger"><?= htmlspecialchars($error) ?></div><?php endif; ?>

<?php if ($summary): ?>
  <div class="alert alert-success">
    ایمپورت با موفقیت انجام شد:
    <ul class="mb-0">
      <li><?= $summary['rows_added'] ?> ردیف درمانی جدید اضافه شد</li>
      <li><?= $summary['rows_updated'] ?> ردیف درمانی موجود بروزرسانی شد</li>
      <li><?= $summary['caps_added'] ?> سقف ترکیبی جدید اضافه شد</li>
      <li><?= $summary['caps_updated'] ?> سقف ترکیبی موجود بروزرسانی شد</li>
    </ul>
  </div>
  <?php if ($summary['warnings']): ?>
    <div class="alert alert-warning">
      <strong>هشدارها:</strong>
      <ul class="mb-0">
        <?php foreach ($summary['warnings'] as $w): ?><li><?= htmlspecialchars($w) ?></li><?php endforeach; ?>
      </ul>
    </div>
  <?php endif; ?>
  <a href="rows.php" class="btn btn-primary">مشاهده ردیف‌ها و سقف‌ها</a>
<?php endif; ?>

<div class="card p-4">
  <form method="post" enctype="multipart/form-data">
    <?= csrf_field() ?>
    <div class="mb-3">
      <label class="form-label">فایل اکسل تکمیل‌شده</label>
      <input type="file" name="xlsx_file" class="form-control" accept=".xlsx" required>
    </div>
    <button type="submit" class="btn btn-success">آپلود و ایمپورت</button>
  </form>
</div>

<?php include __DIR__ . '/../includes/footer.php'; ?>
