<?php
session_start();

// التحقق من تسجيل الدخول
if (!isset($_SESSION['user_id'])) {
    header("Location: index.php");
    exit();
}

require_once 'db_connect.php';

// جلب معرف المستخدم من الرابط (إذا تم تمريره)
$target_user_id = isset($_GET['user_id']) ? intval($_GET['user_id']) : $_SESSION['user_id'];

// التحقق من أن المستخدم الحالي لديه صلاحية للوصول إلى بيانات المستخدم المحدد
if ($target_user_id !== $_SESSION['user_id'] && !checkPermission('users.php')) {
    header("Location: dashboard.php?error=لا يمكنك الوصول إلى بيانات هذا المستخدم");
    exit();
}

// جلب اسم المستخدم المحدد
$user_name = '';
try {
    $stmt = $conn->prepare("SELECT username FROM users WHERE id = :user_id");
    $stmt->execute([':user_id' => $target_user_id]);
    $user = $stmt->fetch(PDO::FETCH_ASSOC);
    $user_name = $user['username'] ?? 'مستخدم غير محدد';
} catch (PDOException $e) {
    error_log("Error fetching user name: " . $e->getMessage());
    $user_name = 'مستخدم غير محدد';
}

$success_message = '';
$error_message = '';
$active_shift = null;
$shift_report = null;
$expected_balance = 0;

// جلب الوردية النشطة للمستخدم المحدد
try {
    $stmt = $conn->prepare("SELECT * FROM shifts WHERE user_id = :user_id AND status = 'open' LIMIT 1");
    $stmt->execute([':user_id' => $target_user_id]);
    $active_shift = $stmt->fetch(PDO::FETCH_ASSOC);
} catch (PDOException $e) {
    error_log("Error fetching active shift: " . $e->getMessage());
    $error_message = "حدث خطأ أثناء جلب الوردية.";
}

// إذا كانت هناك وردية نشطة، نحسب الرصيد المتوقع
if ($active_shift) {
    try {
        // جلب المبيعات المرتبطة بالوردية من جدول sales_invoices
        $stmt = $conn->prepare("
            SELECT 
                SUM(CASE WHEN payment_type = 'cash' THEN final_total ELSE 0 END) AS cash_sales
            FROM sales_invoices 
            WHERE shift_id = :shift_id
        ");
        $stmt->execute([':shift_id' => $active_shift['id']]);
        $sales_data = $stmt->fetch(PDO::FETCH_ASSOC);

        $cash_sales = $sales_data['cash_sales'] ?? 0;
        // حساب الرصيد المتوقع (الرصيد الافتتاحي + المبيعات النقدية)
        $expected_balance = $active_shift['opening_balance'] + $cash_sales;
    } catch (PDOException $e) {
        error_log("Error calculating expected balance: " . $e->getMessage());
        $error_message = "حدث خطأ أثناء حساب الرصيد المتوقع.";
    }
}

// التحقق من وجود تقرير وردية في الجلسة
if (isset($_SESSION['shift_report'])) {
    $shift_report = $_SESSION['shift_report'];
    unset($_SESSION['shift_report']); // حذف التقرير بعد عرضه
}

// معالجة فتح الوردية
if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST['open_shift'])) {
    $opening_balance = floatval($_POST['opening_balance'] ?? 0);

    if ($opening_balance < 0) {
        $error_message = "الرصيد الافتتاحي لا يمكن أن يكون سالبًا!";
    } elseif ($active_shift) {
        $error_message = "وردية نشطة موجودة بالفعل! يرجى إغلاقها أولاً.";
    } else {
        try {
            $stmt = $conn->prepare("INSERT INTO shifts (user_id, start_time, opening_balance, status) VALUES (:user_id, NOW(), :opening_balance, 'open')");
            $stmt->execute([
                ':user_id' => $target_user_id,
                ':opening_balance' => $opening_balance
            ]);
            $success_message = "تم فتح الوردية بنجاح!";
            header("Location: shift.php?user_id=" . $target_user_id);
            exit();
        } catch (PDOException $e) {
            error_log("Error opening shift: " . $e->getMessage());
            $error_message = "فشل فتح الوردية: " . $e->getMessage();
        }
    }
}

// معالجة غلق الوردية
if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST['close_shift'])) {
    $closing_balance = floatval($_POST['closing_balance'] ?? 0);

    if (!$active_shift) {
        $error_message = "لا يوجد وردية نشطة لإغلاقها!";
    } else {
        try {
            $conn->beginTransaction();

            // جلب المبيعات المرتبطة بالوردية من جدول sales_invoices
            $stmt = $conn->prepare("
                SELECT 
                    SUM(final_total) AS total_sales,
                    SUM(CASE WHEN payment_type = 'cash' THEN final_total ELSE 0 END) AS cash_sales,
                    SUM(CASE WHEN payment_type = 'credit' THEN final_total ELSE 0 END) AS credit_sales,
                    COUNT(*) AS transaction_count
                FROM sales_invoices 
                WHERE shift_id = :shift_id
            ");
            $stmt->execute([':shift_id' => $active_shift['id']]);
            $sales_data = $stmt->fetch(PDO::FETCH_ASSOC);

            $total_sales = $sales_data['total_sales'] ?? 0;
            $cash_sales = $sales_data['cash_sales'] ?? 0;
            $credit_sales = $sales_data['credit_sales'] ?? 0;
            $transaction_count = $sales_data['transaction_count'] ?? 0;

            // حساب الرصيد المتوقع (الرصيد الافتتاحي + المبيعات النقدية)
            $expected_balance = $active_shift['opening_balance'] + $cash_sales;

            // التحقق من تطابق الرصيد الختامي المدخل مع الرصيد المتوقع
            if (abs($closing_balance - $expected_balance) > 0.01) { // السماح بفرق ضئيل بسبب الأعداد العشرية
                $error_message = "الرصيد الختامي المدخل لا يتطابق مع الرصيد المتوقع (" . number_format($expected_balance, 2) . " جنيه). يرجى التحقق.";
            } else {
                // حساب العجز أو الزيادة
                $difference = $closing_balance - $expected_balance;
                $difference_status = $difference >= 0 ? 'زيادة' : 'عجز';
                $difference_amount = abs($difference);

                // تحديث بيانات الوردية
                $stmt = $conn->prepare("
                    UPDATE shifts 
                    SET 
                        end_time = NOW(),
                        closing_balance = :closing_balance,
                        total_sales = :total_sales,
                        cash_sales = :cash_sales,
                        card_sales = :credit_sales,
                        status = 'closed'
                    WHERE id = :id
                ");
                $stmt->execute([
                    ':closing_balance' => $closing_balance,
                    ':total_sales' => $total_sales,
                    ':cash_sales' => $cash_sales,
                    ':credit_sales' => $credit_sales,
                    ':id' => $active_shift['id']
                ]);

                // إعداد تقرير الوردية
                $shift_report = [
                    'start_time' => $active_shift['start_time'],
                    'end_time' => date('Y-m-d H:i:s'), // وقت الإغلاق الحالي
                    'opening_balance' => $active_shift['opening_balance'],
                    'closing_balance' => $closing_balance,
                    'total_sales' => $total_sales,
                    'cash_sales' => $cash_sales,
                    'card_sales' => $credit_sales, // تم استبدال card_sales بـ credit_sales لتوافق النظام
                    'transaction_count' => $transaction_count,
                    'expected_balance' => $expected_balance,
                    'difference_status' => $difference_status,
                    'difference_amount' => $difference_amount
                ];

                $conn->commit();

                // حفظ التقرير في الجلسة لعرضه بعد إعادة التوجيه
                $_SESSION['shift_report'] = $shift_report;
                header("Location: shift.php?user_id=" . $target_user_id);
                exit();
            }
        } catch (PDOException $e) {
            $conn->rollBack();
            error_log("Error closing shift: " . $e->getMessage());
            $error_message = "فشل إغلاق الوردية: " . $e->getMessage();
        }
    }
}
?>

<!DOCTYPE html>
<html lang="ar">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Astra - إدارة الورديات</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css">
    <style>
        body {
            margin: 0;
            padding: 0;
            min-height: 100vh;
            direction: rtl;
            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
            background: linear-gradient(135deg, #2ECC71, #3498DB, #E74C3C);
            overflow-x: hidden;
            animation: gradientShift 10s ease infinite;
            background-size: 400% 400%;
        }

        @keyframes gradientShift {
            0% { background-position: 0% 50%; }
            50% { background-position: 100% 50%; }
            100% { background-position: 0% 50%; }
        }

        .container {
            padding: 40px;
            max-width: 800px;
            margin: 50px auto;
            background: rgba(255, 255, 255, 0.95);
            border-radius: 20px;
            box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
            animation: fadeIn 1s ease-in-out;
        }

        @keyframes fadeIn {
            from { opacity: 0; transform: translateY(-20px); }
            to { opacity: 1; transform: translateY(0); }
        }

        h2 {
            color: #2ECC71;
            font-weight: bold;
            text-align: center;
            margin-bottom: 30px;
            text-shadow: 0 0 5px rgba(46, 204, 113, 0.5);
        }

        .form-label {
            color: #3498DB;
            font-weight: bold;
            margin-bottom: 10px;
            display: flex;
            align-items: center;
        }

        .form-label i {
            margin-left: 8px;
            color: #2ECC71;
        }

        .form-control {
            border-radius: 15px;
            border: 2px solid #2ECC71;
            padding: 12px 20px;
            background: rgba(255, 255, 255, 0.8);
            transition: all 0.3s ease;
            box-shadow: inset 0 2px 5px rgba(0, 0, 0, 0.1);
            width: 100%;
        }

        .form-control:focus {
            border-color: #3498DB;
            box-shadow: 0 0 10px rgba(52, 152, 219, 0.5), inset 0 2px 5px rgba(0, 0, 0, 0.1);
            background: #fff;
        }

        .form-control[readonly] {
            background: rgba(200, 200, 200, 0.5);
            cursor: not-allowed;
        }

        .btn {
            border-radius: 15px;
            padding: 12px 30px;
            font-weight: bold;
            transition: all 0.4s ease;
            position: relative;
            overflow: hidden;
        }

        .btn-open {
            background: linear-gradient(45deg, #3498DB, #2980B9);
            border: none;
            color: #fff;
            width: 100%;
        }

        .btn-open:hover {
            background: linear-gradient(45deg, #2980B9, #2471A3);
            transform: translateY(-3px);
            box-shadow: 0 5px 15px rgba(52, 152, 219, 0.5);
        }

        .btn-close {
            background: linear-gradient(45deg, #E74C3C, #C0392B);
            border: none;
            color: #fff;
            width: 100%;
        }

        .btn-close:hover {
            background: linear-gradient(45deg, #C0392B, #A93226);
            transform: translateY(-3px);
            box-shadow: 0 5px 15px rgba(231, 76, 60, 0.5);
        }

        .btn i {
            margin-left: 8px;
        }

        .success-message, .error-message {
            text-align: center;
            margin-bottom: 20px;
            animation: fadeIn 0.5s ease-in-out;
        }

        .success-message {
            color: #2ECC71;
            font-weight: bold;
        }

        .error-message {
            color: #E74C3C;
            font-weight: bold;
        }

        .shift-report {
            margin-top: 20px;
            padding: 15px;
            border: 2px solid #2ECC71;
            border-radius: 15px;
            background: rgba(255, 255, 255, 0.9);
        }

        .shift-report-final {
            margin-top: 20px;
            padding: 20px;
            border: 2px solid #3498DB;
            border-radius: 15px;
            background: rgba(255, 255, 255, 0.9);
        }

        .shift-report-final h4 {
            color: #3498DB;
            text-align: center;
            margin-bottom: 20px;
        }

        .shift-report-final p {
            margin: 5px 0;
        }

        .shift-report-final .highlight {
            font-weight: bold;
            color: #2ECC71;
        }

        .shift-report-final .difference-positive {
            color: #2ECC71;
        }

        .shift-report-final .difference-negative {
            color: #E74C3C;
        }
    </style>
</head>
<body>
    <div class="container">
        <h2><i class="fas fa-clock me-2"></i> إدارة الورديات لـ <?php echo htmlspecialchars($user_name); ?></h2>
        <?php if (isset($success_message)): ?>
            <div class="success-message"><?php echo $success_message; ?></div>
        <?php endif; ?>
        <?php if (isset($error_message)): ?>
            <div class="error-message"><?php echo $error_message; ?></div>
        <?php endif; ?>

        <!-- عرض تقرير الوردية بعد الغلق -->
        <?php if ($shift_report): ?>
            <div class="shift-report-final">
                <h4>تقرير الوردية</h4>
                <p><strong>وقت البدء:</strong> <?php echo $shift_report['start_time']; ?></p>
                <p><strong>وقت الإغلاق:</strong> <?php echo $shift_report['end_time']; ?></p>
                <p><strong>الرصيد الافتتاحي:</strong> <?php echo number_format($shift_report['opening_balance'], 2); ?> جنيه</p>
                <p><strong>الرصيد الختامي:</strong> <?php echo number_format($shift_report['closing_balance'], 2); ?> جنيه</p>
                <p><strong>إجمالي المبيعات:</strong> <span class="highlight"><?php echo number_format($shift_report['total_sales'], 2); ?> جنيه</span></p>
                <p><strong>المبيعات النقدية:</strong> <?php echo number_format($shift_report['cash_sales'], 2); ?> جنيه</p>
                <p><strong>المبيعات الآجلة:</strong> <?php echo number_format($shift_report['card_sales'], 2); ?> جنيه</p>
                <p><strong>عدد العمليات:</strong> <?php echo $shift_report['transaction_count']; ?></p>
                <p><strong>الرصيد المتوقع:</strong> <?php echo number_format($shift_report['expected_balance'], 2); ?> جنيه</p>
                <p>
                    <strong>حالة النقدية:</strong>
                    <span class="<?php echo $shift_report['difference_status'] == 'زيادة' ? 'difference-positive' : 'difference-negative'; ?>">
                        <?php echo $shift_report['difference_status'] . ' بقيمة ' . number_format($shift_report['difference_amount'], 2) . ' جنيه'; ?>
                    </span>
                </p>
            </div>
        <?php endif; ?>

        <!-- فتح الوردية -->
        <?php if (!$active_shift && !$shift_report): ?>
            <form method="POST" action="">
                <div class="mb-3">
                    <label class="form-label"><i class="fas fa-money-bill"></i> الرصيد الافتتاحي (جنيه)</label>
                    <input type="number" class="form-control" name="opening_balance" step="0.01" min="0" required>
                </div>
                <button type="submit" name="open_shift" class="btn btn-open"><i class="fas fa-play"></i> فتح الوردية</button>
            </form>
        <?php endif; ?>

        <!-- عرض بيانات الوردية النشطة وغلق الوردية -->
        <?php if ($active_shift): ?>
            <div class="shift-report">
                <h4>الوردية الحالية</h4>
                <p><strong>وقت البدء:</strong> <?php echo $active_shift['start_time']; ?></p>
                <p><strong>الرصيد الافتتاحي:</strong> <?php echo number_format($active_shift['opening_balance'], 2); ?> جنيه</p>
                <p><strong>الحالة:</strong> مفتوحة</p>
            </div>

            <form method="POST" action="" class="mt-3">
                <div class="mb-3">
                    <label class="form-label"><i class="fas fa-money-bill"></i> الرصيد الختامي المتوقع (جنيه)</label>
                    <input type="text" class="form-control" value="<?php echo number_format($expected_balance, 2); ?>" readonly>
                </div>
                <div class="mb-3">
                    <label class="form-label"><i class="fas fa-money-bill"></i> الرصيد الختامي الفعلي (جنيه)</label>
                    <input type="number" class="form-control" name="closing_balance" step="0.01" min="0" required>
                </div>
                <button type="submit" name="close_shift" class="btn btn-close"><i class="fas fa-stop"></i> إغلاق الوردية</button>
            </form>
        <?php endif; ?>
    </div>

    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>