<?php
// modules/inventory_process.php

if (basename($_SERVER['PHP_SELF']) == 'inventory_process.php') {
    die('Access Denied');
}

// آپدیت دیتابیس برای فیلد انگلیسی طرح
try {
    $pdo->query("SELECT plan_name_en FROM plans LIMIT 1");
} catch (PDOException $e) {
    $pdo->exec("ALTER TABLE plans ADD COLUMN plan_name_en VARCHAR(255) DEFAULT '' AFTER plan_name");
}

// آپدیت دیتابیس برای وضعیت فعال/غیرفعال طرح (سیستم جدید)
try {
    $pdo->query("SELECT is_active FROM plans LIMIT 1");
} catch (PDOException $e) {
    $pdo->exec("ALTER TABLE plans ADD COLUMN is_active TINYINT(1) DEFAULT 1 AFTER color_code");
}

// آپدیت دیتابیس برای ثبت واحد حجم (MB یا GB) در انبار
try {
    $pdo->query("SELECT volume_unit FROM inventory LIMIT 1");
} catch (PDOException $e) {
    $pdo->exec("ALTER TABLE inventory ADD COLUMN volume_unit VARCHAR(5) DEFAULT 'GB' AFTER volume");
}

if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action'])) {
    
    // -- تغییر وضعیت طرح (فعال/غیرفعال) --
    if ($_POST['action'] === 'toggle_plan_status') {
        $activeMainTab = 'plans';
        $planId = (int)$_POST['plan_id'];
        
        $stmt = $pdo->prepare("SELECT is_active FROM plans WHERE id = ?");
        $stmt->execute([$planId]);
        $currentStatus = $stmt->fetchColumn();
        
        // اگر ردیف جدید باشد یا ۱ باشد، آن را ۰ می‌کنیم و برعکس
        $newStatus = ($currentStatus === null || $currentStatus == 1) ? 0 : 1;
        
        $pdo->prepare("UPDATE plans SET is_active = ? WHERE id = ?")->execute([$newStatus, $planId]);
        $msg = $newStatus ? "طرح با موفقیت فعال شد و در فروشگاه نمایش داده می‌شود." : "طرح غیرفعال شد و دیگر در فروشگاه نمایش داده نمی‌شود.";
    }

    // -- مدیریت تخفیف‌ها --
    if ($_POST['action'] === 'add_discount') {
        $activeMainTab = 'plans';
        $planName = trim($_POST['plan_name']);
        $vol = (int)$_POST['volume'];
        $perc = (int)$_POST['discount_percent'];
        
        if ($vol > 0 && $perc > 0 && $perc <= 100) {
            $pdo->prepare("DELETE FROM plan_discounts WHERE plan_name = ? AND volume = ?")->execute([$planName, $vol]);
            $pdo->prepare("INSERT INTO plan_discounts (plan_name, volume, discount_percent) VALUES (?, ?, ?)")->execute([$planName, $vol, $perc]);
            $msg = "رول تخفیف جدید ثبت شد و از این لحظه در سیستم محاسبه می‌گردد.";
        } else {
            $error = "درصد تخفیف باید بین ۱ تا ۱۰۰ باشد.";
        }
    }
    
    if ($_POST['action'] === 'delete_discount') {
        $activeMainTab = 'plans';
        $pdo->prepare("DELETE FROM plan_discounts WHERE plan_name = ? AND volume = ?")->execute([trim($_POST['plan_name']), (int)$_POST['volume']]);
        $msg = "رول تخفیف با موفقیت حذف شد.";
    }

    // -- افزودن طرح جدید --
    if ($_POST['action'] === 'add_plan') {
        $activeMainTab = 'plans';
        $planName = trim($_POST['plan_name']);
        $planNameEn = trim($_POST['plan_name_en'] ?? '');
        $adminCost = (int)str_replace(',', '', $_POST['admin_cost_price']);
        $costPrice = (int)str_replace(',', '', $_POST['cost_price']);
        $retailPrice = (int)str_replace(',', '', $_POST['retail_price']);
        $colorCode = trim($_POST['color_code']);

        if (!$planName || $costPrice <= 0) {
            $error = "نام طرح و قیمت فروش به نماینده الزامی است.";
        } else {
            $stmt = $pdo->prepare("INSERT INTO plans (plan_name, plan_name_en, admin_cost_price, cost_price, retail_price, color_code, is_active) VALUES (?, ?, ?, ?, ?, ?, 1)");
            if ($stmt->execute([$planName, $planNameEn, $adminCost, $costPrice, $retailPrice, $colorCode])) {
                $msg = "طرح فروش جدید با موفقیت ایجاد شد.";
            } else { $error = "خطا در ثبت طرح."; }
        }
    }

    // -- ویرایش طرح پایه‌ای --
    if ($_POST['action'] === 'edit_plan') {
        $activeMainTab = 'plans';
        $planId = (int)$_POST['plan_id'];
        $planName = trim($_POST['plan_name']);
        $planNameEn = trim($_POST['plan_name_en'] ?? '');
        $adminCost = (int)str_replace(',', '', $_POST['admin_cost_price']);
        $costPrice = (int)str_replace(',', '', $_POST['cost_price']);
        $retailPrice = (int)str_replace(',', '', $_POST['retail_price']);
        $colorCode = trim($_POST['color_code']);

        if (!$planName || $costPrice <= 0) {
            $error = "نام طرح و قیمت فروش به نماینده الزامی است.";
        } else {
            $stmt = $pdo->prepare("UPDATE plans SET plan_name=?, plan_name_en=?, admin_cost_price=?, cost_price=?, retail_price=?, color_code=? WHERE id=?");
            if ($stmt->execute([$planName, $planNameEn, $adminCost, $costPrice, $retailPrice, $colorCode, $planId])) {
                $msg = "تغییرات طرح با موفقیت ذخیره شد.";
            } else { $error = "خطا در ویرایش طرح."; }
        }
    }

    // -- حذف طرح --
    if ($_POST['action'] === 'delete_plan') {
        $activeMainTab = 'plans';
        $pdo->prepare("DELETE FROM plans WHERE id = ?")->execute([(int)$_POST['plan_id']]);
        $msg = "طرح فروش با موفقیت حذف شد.";
    }

    // -- افزودن تکی/یوزرنیم‌ساز (همراه با اعتبار سنجی اجباری ساب لینک) --
    if ($_POST['action'] === 'add_single') {
        $activeMainTab = 'import';
        $activeSubTab = isset($_POST['is_generator']) ? 'generator' : 'single';
        
        $planName = trim($_POST['plan_name'] ?? '');
        $volume = (float)($_POST['volume'] ?? 0);
        $volumeUnit = (isset($_POST['volume_unit']) && $_POST['volume_unit'] === 'MB') ? 'MB' : 'GB';
        $usernames = $_POST['username'] ?? [];
        $links = $_POST['config_link'] ?? [];

        if (!$planName || $volume <= 0 || empty($usernames) || empty($links)) {
            $error = "لطفاً حداقل یک نام کاربری و لینک معتبر وارد کنید.";
        } else {
            $successCount = 0; $duplicateCount = 0; $missingSubCount = 0;
            $processedLinks = []; $processedUsernames = [];

            $stmtCheck = $pdo->prepare("SELECT id FROM inventory WHERE config_link = ? OR account_username = ?");
            // فیلد volume_unit به دستور Insert اضافه شد
            $stmtInsert = $pdo->prepare("INSERT INTO inventory (plan_name, volume, volume_unit, account_username, config_link, status) VALUES (?, ?, ?, ?, ?, 'available')");
            
            for ($i = 0; $i < count($usernames); $i++) {
                $u = trim($usernames[$i]); $l = trim($links[$i]);
                if (empty($l)) { $missingSubCount++; continue; } 
                if (!empty($u) && !empty($l)) {
                    if (in_array($l, $processedLinks) || in_array($u, $processedUsernames)) { $duplicateCount++; continue; }
                    $stmtCheck->execute([$l, $u]);
                    if ($stmtCheck->rowCount() > 0) { $duplicateCount++; continue; }

                    if ($stmtInsert->execute([$planName, $volume, $volumeUnit, $u, $l])) {
                        $successCount++;
                        $processedLinks[] = $l; $processedUsernames[] = $u;
                    }
                }
            }
            if ($successCount > 0) {
                $msg = "$successCount اکانت با موفقیت به انبار اضافه شد.";
                if ($duplicateCount > 0) $msg .= " | $duplicateCount مورد تکراری نادیده گرفته شد.";
                if ($missingSubCount > 0) $error = "$missingSubCount اکانت به دلیل نداشتن لینک ساب مسدود و ثبت نشدند!";
            } else { 
                $error = "هیچ محصول معتبری ثبت نشد. (احتمالا تکراری یا بدون لینک ساب بوده‌اند)"; 
            }
        }
    }

    // -- درون‌ریزی گروهی --
    if ($_POST['action'] === 'bulk_import') {
        $activeMainTab = 'import'; $activeSubTab = 'bulk';
        $planName = trim($_POST['plan_name'] ?? '');
        $volume = (float)($_POST['volume'] ?? 0);
        $volumeUnit = (isset($_POST['volume_unit']) && $_POST['volume_unit'] === 'MB') ? 'MB' : 'GB';
        $bulkData = trim($_POST['bulk_data']);
        
        if (!$planName || $volume <= 0 || empty($bulkData)) {
            $error = "لطفاً طرح، حجم و لیست کانفیگ‌ها را وارد کنید.";
        } else {
            $lines = explode("\n", $bulkData);
            $successCount = 0; $duplicateCount = 0; $missingSubCount = 0;
            $processedLinks = []; $processedUsernames = [];

            $pdo->beginTransaction();
            try {
                $stmtCheck = $pdo->prepare("SELECT id FROM inventory WHERE config_link = ? OR account_username = ?");
                // فیلد volume_unit به دستور Insert اضافه شد
                $stmtInsert = $pdo->prepare("INSERT INTO inventory (plan_name, volume, volume_unit, account_username, config_link, status) VALUES (?, ?, ?, ?, ?, 'available')");
                
                foreach ($lines as $line) {
                    $parts = explode(',', trim($line), 2);
                    if (count($parts) === 2 && !empty(trim($parts[0]))) {
                        $u = trim($parts[0]); $l = trim($parts[1]);
                        if(empty($l)) { $missingSubCount++; continue; }

                        if (in_array($l, $processedLinks) || in_array($u, $processedUsernames)) { $duplicateCount++; continue; }
                        $stmtCheck->execute([$l, $u]);
                        if ($stmtCheck->rowCount() > 0) { $duplicateCount++; continue; }

                        $stmtInsert->execute([$planName, $volume, $volumeUnit, $u, $l]);
                        $successCount++;
                        $processedLinks[] = $l; $processedUsernames[] = $u;
                    }
                }
                $pdo->commit();
                if ($successCount > 0) {
                    $msg = "$successCount اکانت گروهی به انبار وارد شد.";
                    if ($duplicateCount > 0) $msg .= " | $duplicateCount تکراری خط خورد.";
                    if ($missingSubCount > 0) $error = "$missingSubCount اکانت به دلیل فرمت نامعتبر یا بدون لینک ساب بودن ثبت نشدند.";
                } else { $error = "اطلاعات معتبری یافت نشد."; }
            } catch (Exception $e) { $pdo->rollBack(); $error = "خطا در درون‌ریزی اطلاعات."; }
        }
    }

    // -- ویرایش اطلاعات محصول انبار --
    if ($_POST['action'] === 'edit_item') {
        $activeMainTab = 'inventory';
        $itemId = (int)$_POST['item_id'];
        $newUsername = trim($_POST['account_username']);
        $newLink = trim($_POST['config_link']);

        if (!$itemId || !$newUsername || !$newLink) {
            $error = "لطفا یوزرنیم و لینک ساب را کامل وارد کنید.";
        } else {
            $stmt = $pdo->prepare("UPDATE inventory SET account_username = ?, config_link = ? WHERE id = ? AND status = 'available'");
            if ($stmt->execute([$newUsername, $newLink, $itemId])) {
                $msg = "تغییرات محصول با موفقیت در انبار ثبت شد.";
            } else {
                $error = "خطا در بروزرسانی محصول.";
            }
        }
    }

    // -- حذف از انبار --
    if ($_POST['action'] === 'delete_item') {
        $activeMainTab = 'inventory';
        $pdo->prepare("DELETE FROM inventory WHERE id = ? AND status = 'available'")->execute([(int)$_POST['item_id']]);
        $msg = "محصول از انبار حذف شد.";
    }
}
?>