<?php
include '_head.php';

/*
  مستورد عام لمواقع Shopify
  تكتب رابط أي collection مثل:
  https://modex.store/ar/collections/fans-air-coolers

  الكود يحوله تلقائياً إلى:
  https://modex.store/ar/collections/fans-air-coolers/products.json?limit=8&page=1
*/

function clean_source_url($url){
  $url = trim($url);
  $url = str_replace(' ', '', $url);
  $url = strtok($url, '#');
  $url = rtrim($url, '/');
  return $url;
}

function build_products_endpoint($source_url, $limit, $page){
  $source_url = clean_source_url($source_url);

  if ($source_url == '') {
    return '';
  }

  // إذا كتب المستخدم رابط products.json مباشرة
  if (strpos($source_url, '/products.json') !== false) {
    $base = strtok($source_url, '?');
    return $base . '?limit=' . (int)$limit . '&page=' . (int)$page;
  }

  // إزالة أي query مثل ?sort_by=...
  $base = strtok($source_url, '?');
  $base = rtrim($base, '/');

  return $base . '/products.json?limit=' . (int)$limit . '&page=' . (int)$page;
}

function fetch_url_content($url){
  if ($url == '') return false;

  if (function_exists('curl_init')) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 25);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 15);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 TariqAlaghaImporter');
    $data = curl_exec($ch);
    curl_close($ch);
    return $data;
  }

  return @file_get_contents($url);
}

function safe_text($s){
  $s = html_entity_decode(strip_tags((string)$s), ENT_QUOTES, 'UTF-8');
  $s = trim(preg_replace('/\s+/', ' ', $s));
  return $s;
}

function get_or_create_brand($conn, $brand_name){
  $brand_name = trim($brand_name);
  if ($brand_name == '') {
    $brand_name = 'Imported';
  }

  $brand_esc = mysqli_real_escape_string($conn, $brand_name);
  $q = mysqli_query($conn, "SELECT id FROM brands WHERE name='$brand_esc' LIMIT 1");
  if ($q && mysqli_num_rows($q) > 0) {
    $r = mysqli_fetch_assoc($q);
    return (int)$r['id'];
  }

  mysqli_query($conn, "INSERT INTO brands(name,logo,sort_order,status) VALUES('$brand_esc','',999,1)");
  return (int)mysqli_insert_id($conn);
}

function get_or_create_sub_category($conn, $parent_id, $name){
  $parent_id = (int)$parent_id;
  $name = trim($name);

  if ($name == '') {
    return $parent_id;
  }

  $name_esc = mysqli_real_escape_string($conn, $name);

  $q = mysqli_query($conn, "
    SELECT id 
    FROM categories 
    WHERE parent_id=$parent_id 
    AND (name_en='$name_esc' OR name_ar='$name_esc')
    LIMIT 1
  ");

  if ($q && mysqli_num_rows($q) > 0) {
    $r = mysqli_fetch_assoc($q);
    return (int)$r['id'];
  }

  mysqli_query($conn, "
    INSERT INTO categories(parent_id,name_en,name_ar,name_ku,image,banner_image,sort_order,status)
    VALUES($parent_id,'$name_esc','$name_esc','$name_esc','','',999,1)
  ");

  return (int)mysqli_insert_id($conn);
}

function normalize_price_iqd($price){
  $price = (float)$price;

  /*
    بعض مواقع Shopify ترجع السعر بالدينار مثل 71000
    وبعضها ترجع 71.000
    نخليه كما هو إذا أكبر من 1000
  */

  if ($price < 1000 && $price > 0) {
    $price = $price * 1000;
  }

  return $price;
}

function product_exists($conn, $sku, $name_en, $name_ar){
  $conds = array();

  if (trim($sku) != '') {
    $sku_esc = mysqli_real_escape_string($conn, $sku);
    $conds[] = "sku='$sku_esc'";
  }

  if (trim($name_en) != '') {
    $n1 = mysqli_real_escape_string($conn, $name_en);
    $conds[] = "name_en='$n1'";
  }

  if (trim($name_ar) != '') {
    $n2 = mysqli_real_escape_string($conn, $name_ar);
    $conds[] = "name_ar='$n2'";
  }

  if (empty($conds)) return false;

  $sql = "SELECT id FROM products WHERE " . implode(' OR ', $conds) . " LIMIT 1";
  $q = mysqli_query($conn, $sql);

  return ($q && mysqli_num_rows($q) > 0);
}

function save_remote_image_webp($url, $folder){
  $url = trim($url);
  if ($url == '') return '';

  if (!is_dir('../' . $folder)) {
    @mkdir('../' . $folder, 0777, true);
  }

  $data = fetch_url_content($url);
  if (!$data) return $url;

  $im = @imagecreatefromstring($data);
  if (!$im) {
    return $url;
  }

  $filename = $folder . '/imported_' . time() . '_' . mt_rand(1000,9999) . '.webp';
  $full = '../' . $filename;

  if (function_exists('imagewebp')) {
    imagewebp($im, $full, 72);
    imagedestroy($im);
    return $filename;
  }

  imagedestroy($im);
  return $url;
}

$message = '';
$added = 0;
$skipped = 0;
$checked = 0;
$images_added = 0;
$endpoint = '';

$source_url = isset($_POST['source_url']) ? trim($_POST['source_url']) : '';
$page = isset($_POST['page']) ? (int)$_POST['page'] : 1;
$limit = isset($_POST['limit']) ? (int)$_POST['limit'] : 8;
$category_id = isset($_POST['category_id']) ? (int)$_POST['category_id'] : 0;
$images_limit = isset($_POST['images_limit']) ? (int)$_POST['images_limit'] : 1;
$create_sub_categories = isset($_POST['create_sub_categories']) ? 1 : 0;
$download_images = isset($_POST['download_images']) ? 1 : 0;

if ($page < 1) $page = 1;
if ($limit < 1) $limit = 1;
if ($limit > 20) $limit = 20;
if ($images_limit < 1) $images_limit = 1;
if ($images_limit > 5) $images_limit = 5;

if ($_SERVER['REQUEST_METHOD'] == 'POST') {

  if ($source_url == '') {
    $message = '❌ اكتب رابط القسم من الموقع المصدر.';
  } elseif ($category_id <= 0) {
    $message = '❌ اختر القسم الذي تريد تنزيل المنتجات داخله.';
  } else {

    $endpoint = build_products_endpoint($source_url, $limit, $page);
    $json = fetch_url_content($endpoint);

    if (!$json) {
      $message = '❌ لم أستطع جلب الرابط. قد يكون الموقع يمنع الاستيراد أو الرابط غير صحيح.';
    } else {

      $data = json_decode($json, true);

      if (!is_array($data) || !isset($data['products']) || !is_array($data['products'])) {
        $message = '❌ هذا الرابط لا يبدو أنه يدعم products.json. غالباً الموقع ليس Shopify أو يمنع الوصول.';
      } else {

        foreach ($data['products'] as $p) {

          $checked++;

          $title = isset($p['title']) ? safe_text($p['title']) : '';
          $handle = isset($p['handle']) ? safe_text($p['handle']) : '';
          $body_html = isset($p['body_html']) ? $p['body_html'] : '';
          $desc = safe_text($body_html);

          $vendor = isset($p['vendor']) ? safe_text($p['vendor']) : 'Imported';
          $product_type = isset($p['product_type']) ? safe_text($p['product_type']) : '';

          $sku = $handle;
          $price = 0;
          $old_price = 0;

          if (isset($p['variants'][0])) {
            $v = $p['variants'][0];

            if (isset($v['sku']) && trim($v['sku']) != '') {
              $sku = safe_text($v['sku']);
            }

            if (isset($v['price'])) {
              $price = normalize_price_iqd($v['price']);
            }

            if (isset($v['compare_at_price']) && $v['compare_at_price'] != '') {
              $old_price = normalize_price_iqd($v['compare_at_price']);
            }
          }

          if ($title == '') {
            $skipped++;
            continue;
          }

          $name_en = $title;
          $name_ar = $title;
          $name_ku = $title;

          if (product_exists($conn, $sku, $name_en, $name_ar)) {
            $skipped++;
            continue;
          }

          $final_cat = $category_id;

          if ($create_sub_categories && $product_type != '') {
            $final_cat = get_or_create_sub_category($conn, $category_id, $product_type);
          }

          $brand_id = get_or_create_brand($conn, $vendor);

          $discount_percent = 0;
          if ($old_price > 0 && $price > 0 && $old_price > $price) {
            $discount_percent = round((($old_price - $price) / $old_price) * 100);
          }

          $cat = (int)$final_cat;
          $brand = (int)$brand_id;

          $name_en_esc = mysqli_real_escape_string($conn, $name_en);
          $name_ar_esc = mysqli_real_escape_string($conn, $name_ar);
          $name_ku_esc = mysqli_real_escape_string($conn, $name_ku);

          $desc_en_esc = mysqli_real_escape_string($conn, $desc);
          $desc_ar_esc = mysqli_real_escape_string($conn, $desc);
          $desc_ku_esc = mysqli_real_escape_string($conn, $desc);

          $features_esc = mysqli_real_escape_string($conn, $product_type);
          $sku_esc = mysqli_real_escape_string($conn, $sku);

          mysqli_query($conn, "
            INSERT INTO products
            (
              category_id,
              brand_id,
              name_en,
              name_ar,
              name_ku,
              sku,
              description_en,
              description_ar,
              description_ku,
              features,
              price,
              old_price,
              discount_percent,
              stock,
              is_new,
              is_hot,
              is_best,
              status
            )
            VALUES
            (
              $cat,
              $brand,
              '$name_en_esc',
              '$name_ar_esc',
              '$name_ku_esc',
              '$sku_esc',
              '$desc_en_esc',
              '$desc_ar_esc',
              '$desc_ku_esc',
              '$features_esc',
              $price,
              $old_price,
              $discount_percent,
              10,
              1,
              0,
              0,
              1
            )
          ");

          $pid = mysqli_insert_id($conn);

          if ($pid > 0) {

            $sort = 1;

            if (isset($p['images']) && is_array($p['images'])) {

              foreach ($p['images'] as $img) {

                if ($sort > $images_limit) break;

                $src = '';
                if (isset($img['src'])) {
                  $src = trim($img['src']);
                }

                if ($src != '') {
                  if ($download_images) {
                    $src = save_remote_image_webp($src, 'uploads/products');
                  }

                  $src_esc = mysqli_real_escape_string($conn, $src);
                  mysqli_query($conn, "
                    INSERT INTO product_images(product_id,image_path,sort_order)
                    VALUES($pid,'$src_esc',$sort)
                  ");

                  $images_added++;
                  $sort++;
                }
              }
            }

            $added++;
          } else {
            $skipped++;
          }
        }

        $message = '✅ تم فحص ' . $checked . ' منتج. تمت إضافة ' . $added . '، وتخطي ' . $skipped . '، وإضافة ' . $images_added . ' صورة. الصفحة التالية: ' . ($page + 1);
      }
    }
  }
}

$cats = mysqli_query($conn, "
  SELECT c.*, p.name_en parent_name
  FROM categories c
  LEFT JOIN categories p ON c.parent_id=p.id
  WHERE c.status=1
  ORDER BY COALESCE(c.parent_id,0), c.sort_order, c.id
");
?>

<h1>استيراد منتجات من أي رابط Shopify</h1>

<div class="admin-card" style="margin-bottom:18px;">
  <p>
    اكتب رابط أي قسم من أي موقع Shopify، ثم اختر القسم من موقعك واضغط بدء الاستيراد.
  </p>
  <p style="color:#b00020;font-weight:bold;">
    مثال:
    https://modex.store/ar/collections/fans-air-coolers
  </p>
</div>

<?php if ($message != ''): ?>
  <div class="admin-card" style="background:#f1fff4;border:1px solid #99e6aa;margin-bottom:15px;">
    <strong><?php echo e($message); ?></strong>
    <?php if ($endpoint != ''): ?>
      <br><br>
      <strong>Endpoint:</strong>
      <br>
      <code style="direction:ltr;display:block;background:#fff;padding:10px;border:1px solid #ddd;overflow:auto;">
        <?php echo e($endpoint); ?>
      </code>
    <?php endif; ?>
  </div>
<?php endif; ?>

<form class="admin-card admin-form" method="post">

  <label>رابط القسم من الموقع المصدر</label>
  <input
    type="text"
    name="source_url"
    value="<?php echo e($source_url); ?>"
    placeholder="https://modex.store/ar/collections/fans-air-coolers"
    required
    style="direction:ltr;"
  >

  <label>اختر القسم الذي تنزل داخله المنتجات</label>
  <select name="category_id" required>
    <option value="">-- اختر القسم --</option>
    <?php while($c = mysqli_fetch_assoc($cats)): ?>
      <?php
        $label = ($c['parent_name'] ? $c['parent_name'] . ' › ' : '') . $c['name_en'];
        $selected = ((int)$c['id'] == $category_id) ? 'selected' : '';
      ?>
      <option value="<?php echo (int)$c['id']; ?>" <?php echo $selected; ?>>
        <?php echo e($label); ?>
      </option>
    <?php endwhile; ?>
  </select>

  <label>رقم الصفحة</label>
  <input type="number" name="page" min="1" value="<?php echo (int)$page; ?>">

  <label>عدد المنتجات في الدفعة الواحدة</label>
  <input type="number" name="limit" min="1" max="20" value="<?php echo (int)$limit; ?>">

  <label>عدد الصور لكل منتج</label>
  <input type="number" name="images_limit" min="1" max="5" value="<?php echo (int)$images_limit; ?>">

  <label>
    <input type="checkbox" name="create_sub_categories" <?php echo $create_sub_categories ? 'checked' : ''; ?>>
    إنشاء أقسام فرعية داخل القسم المختار حسب نوع المنتج
  </label>

  <label>
    <input type="checkbox" name="download_images" <?php echo $download_images ? 'checked' : ''; ?>>
    تنزيل الصور WebP داخل الموقع. اتركه غير مفعّل للأسرع.
  </label>

  <button class="primary-btn">بدء الاستيراد</button>
</form>

<div class="admin-card" style="margin-top:18px;">
  <h3>طريقة الاستخدام</h3>
  <p>1. الصق رابط القسم من الموقع المصدر.</p>
  <p>2. اختر القسم المناسب في موقعك.</p>
  <p>3. اجعل عدد المنتجات 8 أو أقل.</p>
  <p>4. اجعل الصور 1 فقط حتى لا يثقل الموقع.</p>
  <p>5. بعد الانتهاء غيّر رقم الصفحة من 1 إلى 2 ثم 3 وهكذا.</p>
</div>

<?php include '_foot.php'; ?>