<?php
header('Content-Type: application/json; charset=utf-8');
require_once '../db.php';

// Middleware / ตรวจสอบสิทธิ์การเข้าถึง Seller & Admin Dashboard
// ต้องล็อกอิน และต้องเป็น role='admin' หรือ (role='seller' พร้อม seller_status='approved')
if (!isset($_SESSION['user_id'])) {
    http_response_code(401);
    echo json_encode(['success' => false, 'message' => 'กรุณาเข้าสู่ระบบก่อน']);
    exit;
}

$userRole = $_SESSION['role'] ?? 'user';
$sellerStatus = $_SESSION['seller_status'] ?? 'none';

if ($userRole !== 'admin' && ($userRole !== 'seller' || $sellerStatus !== 'approved')) {
    http_response_code(403);
    echo json_encode([
        'success' => false, 
        'message' => 'คุณไม่มีสิทธิ์จัดการสินค้า (403 Forbidden)'
    ]);
    exit;
}

$method = $_SERVER['REQUEST_METHOD'];
$sellerId = (int)$_SESSION['user_id'];
$isAdmin = ($userRole === 'admin');

// Helper function สำหรับลบไฟล์รูปภาพในเครื่อง
function deleteLocalProductImage($imageUrl) {
    if (empty($imageUrl)) return;
    // ตรวจสอบว่าเป็นพาธภายในโปรเจกต์ เช่น uploads/products/prod_xxx.jpg หรือไม่
    if (strpos($imageUrl, 'uploads/products/') !== false) {
        // ดึงเฉพาะชื่อไฟล์หรือ relative path จาก uploads/
        $cleanPath = preg_replace('/^.*?uploads\/products\//', 'uploads/products/', $imageUrl);
        $fullPath = __DIR__ . '/../' . $cleanPath;
        if (file_exists($fullPath) && is_file($fullPath)) {
            @unlink($fullPath);
        }
    }
}

// ---- GET: seller dashboard data (products + orders) ----
if ($method === 'GET') {
    // Admin เห็นสินค้าทั้งหมด, Seller เห็นเฉพาะของตัวเอง
    if ($isAdmin) {
        $stmt = $conn->prepare("SELECT product_id, seller_id, category_id, product_name, description, price, original_price, stock, image_url, badge, badge_text, approval_status, is_active, sold_count, created_at FROM products ORDER BY created_at DESC");
        $stmt->execute();
    } else {
        $stmt = $conn->prepare("SELECT product_id, seller_id, category_id, product_name, description, price, original_price, stock, image_url, badge, badge_text, approval_status, is_active, sold_count, created_at FROM products WHERE seller_id = ? ORDER BY created_at DESC");
        $stmt->bind_param('i', $sellerId);
        $stmt->execute();
    }
    $products = $stmt->get_result()->fetch_all(MYSQLI_ASSOC);
    $stmt->close();

    // รายการคำสั่งซื้อที่มีสินค้าของผู้ขาย (Admin เห็นทุกออเดอร์)
    if ($isAdmin) {
        $stmt = $conn->prepare("
            SELECT DISTINCT o.order_id, o.status, o.total_amount, o.created_at,
                   u.full_name AS customer_name, u.email AS customer_email
            FROM orders o
            JOIN users u ON u.user_id = o.user_id
            ORDER BY o.created_at DESC
            LIMIT 50
        ");
        $stmt->execute();
    } else {
        $stmt = $conn->prepare("
            SELECT DISTINCT o.order_id, o.status, o.total_amount, o.created_at,
                   u.full_name AS customer_name, u.email AS customer_email
            FROM orders o
            JOIN order_items oi ON oi.order_id = o.order_id
            JOIN products p ON p.product_id = oi.product_id
            JOIN users u ON u.user_id = o.user_id
            WHERE p.seller_id = ?
            ORDER BY o.created_at DESC
            LIMIT 50
        ");
        $stmt->bind_param('i', $sellerId);
        $stmt->execute();
    }
    $orders = $stmt->get_result()->fetch_all(MYSQLI_ASSOC);
    $stmt->close();

    echo json_encode(['success' => true, 'products' => $products, 'orders' => $orders]);
    exit;
}

// ---- POST: เพิ่มสินค้าใหม่ ----
if ($method === 'POST') {
    $input = json_decode(file_get_contents('php://input'), true);
    $name = trim($input['product_name'] ?? '');
    $desc = trim($input['description'] ?? '');
    $price = (float)($input['price'] ?? 0);
    $originalPrice = !empty($input['original_price']) ? (float)$input['original_price'] : null;
    $category = trim($input['category_id'] ?? '');
    $stock = isset($input['stock']) ? (int)$input['stock'] : 10;
    $imageUrl = trim($input['image_url'] ?? '');
    $badge = !empty($input['badge']) ? trim($input['badge']) : null;
    $badgeText = !empty($input['badge_text']) ? trim($input['badge_text']) : null;

    if (empty($name) || $price <= 0 || empty($category)) {
        http_response_code(400);
        echo json_encode(['success' => false, 'message' => 'กรุณากรอกข้อมูลสินค้าให้ครบถ้วน']);
        exit;
    }

    // กำหนด badgeText ตาม badge หากไม่ได้ส่งมา
    if ($badge && empty($badgeText)) {
        if ($badge === 'sale') $badgeText = 'ลด 50%';
        else if ($badge === 'new') $badgeText = 'มาใหม่';
        else if ($badge === 'hot') $badgeText = 'ขายดี';
    }

    // สินค้าจาก Seller จะถูกส่งเข้าสถานะ pending เพื่อรอ Admin อนุมัติ
    // ถ้า Admin เป็นคนเพิ่มเอง ให้ approved ทันที
    $approvalStatus = $isAdmin ? 'approved' : 'pending';
    $isActive = $isAdmin ? 1 : 0;

    $stmt = $conn->prepare("INSERT INTO products (seller_id, category_id, product_name, description, price, original_price, stock, image_url, badge, badge_text, approval_status, is_active) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
    $stmt->bind_param('isssddissssi', $sellerId, $category, $name, $desc, $price, $originalPrice, $stock, $imageUrl, $badge, $badgeText, $approvalStatus, $isActive);

    if ($stmt->execute()) {
        $productId = $conn->insert_id;
        $stmt->close();
        $msg = $isAdmin ? 'เพิ่มสินค้าใหม่เรียบร้อยแล้ว' : 'เพิ่มสินค้าเรียบร้อย รอ Admin อนุมัติก่อนแสดงในร้านค้า';
        echo json_encode(['success' => true, 'message' => $msg, 'product_id' => $productId]);
    } else {
        $stmt->close();
        http_response_code(500);
        echo json_encode(['success' => false, 'message' => 'เกิดข้อผิดพลาดในการบันทึกสินค้า']);
    }
    exit;
}

// ---- PUT: แก้ไขสินค้า ----
// Admin แก้ไขได้ทุกสินค้า, Seller แก้ไขได้เฉพาะสินค้าของตัวเอง
if ($method === 'PUT') {
    $input = json_decode(file_get_contents('php://input'), true);
    $productId = (int)($input['product_id'] ?? 0);

    if ($productId <= 0) {
        http_response_code(400);
        echo json_encode(['success' => false, 'message' => 'ไม่พบรหัสสินค้า']);
        exit;
    }

    // ตรวจสอบว่าสินค้ามีอยู่จริง และเช็คสิทธิ์ความเป็นเจ้าของ
    $checkStmt = $conn->prepare("SELECT seller_id, image_url FROM products WHERE product_id = ?");
    $checkStmt->bind_param('i', $productId);
    $checkStmt->execute();
    $productRow = $checkStmt->get_result()->fetch_assoc();
    $checkStmt->close();

    if (!$productRow) {
        http_response_code(404);
        echo json_encode(['success' => false, 'message' => 'ไม่พบสินค้านี้ในระบบ']);
        exit;
    }

    if (!$isAdmin && (int)$productRow['seller_id'] !== $sellerId) {
        http_response_code(403);
        echo json_encode(['success' => false, 'message' => 'คุณไม่มีสิทธิ์แก้ไขสินค้านี้']);
        exit;
    }

    // รับค่าที่จะอัปเดต
    $name = trim($input['product_name'] ?? '');
    $desc = trim($input['description'] ?? '');
    $price = (float)($input['price'] ?? 0);
    $originalPrice = !empty($input['original_price']) ? (float)$input['original_price'] : null;
    $category = trim($input['category_id'] ?? '');
    $stock = isset($input['stock']) ? (int)$input['stock'] : 10;
    $imageUrl = trim($input['image_url'] ?? '');
    $badge = !empty($input['badge']) ? trim($input['badge']) : null;
    $badgeText = !empty($input['badge_text']) ? trim($input['badge_text']) : null;

    if (empty($name) || $price <= 0 || empty($category)) {
        http_response_code(400);
        echo json_encode(['success' => false, 'message' => 'กรุณากรอกข้อมูลสินค้าให้ครบถ้วน']);
        exit;
    }

    if ($badge && empty($badgeText)) {
        if ($badge === 'sale') $badgeText = 'ลด 50%';
        else if ($badge === 'new') $badgeText = 'มาใหม่';
        else if ($badge === 'hot') $badgeText = 'ขายดี';
    }

    // หากมีการเปลี่ยนรูปภาพหรือลบรูปภาพ และรูปเดิมเป็นไฟล์ในเซิร์ฟเวอร์ ให้ลบรูปเดิมออก
    $oldImage = $productRow['image_url'] ?? '';
    if (!empty($oldImage) && $oldImage !== $imageUrl) {
        deleteLocalProductImage($oldImage);
    }

    // Seller แก้ไขสินค้าแล้วให้กลับไปเป็น pending อีกครั้งเพื่อรอ Admin อนุมัติใหม่
    // Admin แก้ไขแล้วคงสถานะ approved ไว้เหมือนเดิม
    if ($isAdmin) {
        $stmt = $conn->prepare("UPDATE products SET category_id = ?, product_name = ?, description = ?, price = ?, original_price = ?, stock = ?, image_url = ?, badge = ?, badge_text = ? WHERE product_id = ?");
        $stmt->bind_param('sssddisssi', $category, $name, $desc, $price, $originalPrice, $stock, $imageUrl, $badge, $badgeText, $productId);
    } else {
        $stmt = $conn->prepare("UPDATE products SET category_id = ?, product_name = ?, description = ?, price = ?, original_price = ?, stock = ?, image_url = ?, badge = ?, badge_text = ?, approval_status = 'pending', is_active = 0 WHERE product_id = ? AND seller_id = ?");
        $stmt->bind_param('sssddisssii', $category, $name, $desc, $price, $originalPrice, $stock, $imageUrl, $badge, $badgeText, $productId, $sellerId);
    }

    if ($stmt->execute()) {
        $stmt->close();
        $msg = $isAdmin ? 'แก้ไขข้อมูลสินค้าเรียบร้อยแล้ว' : 'แก้ไขสินค้าเรียบร้อย รอ Admin อนุมัติอีกครั้ง';
        echo json_encode(['success' => true, 'message' => $msg]);
    } else {
        $stmt->close();
        http_response_code(500);
        echo json_encode(['success' => false, 'message' => 'เกิดข้อผิดพลาดในการแก้ไขสินค้า']);
    }
    exit;
}

// ---- DELETE: ลบสินค้า ----
// Admin ลบได้ทุกสินค้า, Seller ลบได้เฉพาะสินค้าของตัวเอง
if ($method === 'DELETE') {
    $input = json_decode(file_get_contents('php://input'), true);
    $productId = (int)($input['product_id'] ?? 0);

    if ($productId <= 0) {
        http_response_code(400);
        echo json_encode(['success' => false, 'message' => 'ไม่พบรหัสสินค้า']);
        exit;
    }

    $checkStmt = $conn->prepare("SELECT seller_id, image_url FROM products WHERE product_id = ?");
    $checkStmt->bind_param('i', $productId);
    $checkStmt->execute();
    $productRow = $checkStmt->get_result()->fetch_assoc();
    $checkStmt->close();

    if (!$productRow) {
        http_response_code(404);
        echo json_encode(['success' => false, 'message' => 'ไม่พบสินค้านี้']);
        exit;
    }

    if (!$isAdmin && (int)$productRow['seller_id'] !== $sellerId) {
        http_response_code(403);
        echo json_encode(['success' => false, 'message' => 'คุณไม่มีสิทธิ์ลบสินค้านี้']);
        exit;
    }

    if ($isAdmin) {
        $stmt = $conn->prepare("DELETE FROM products WHERE product_id = ?");
        $stmt->bind_param('i', $productId);
    } else {
        $stmt = $conn->prepare("DELETE FROM products WHERE product_id = ? AND seller_id = ?");
        $stmt->bind_param('ii', $productId, $sellerId);
    }

    if ($stmt->execute()) {
        $stmt->close();
        // ลบไฟล์รูปภาพในเครื่องที่เกี่ยวข้อง
        if (!empty($productRow['image_url'])) {
            deleteLocalProductImage($productRow['image_url']);
        }
        echo json_encode(['success' => true, 'message' => 'ลบสินค้าออกจากคลังเรียบร้อยแล้ว']);
    } else {
        $stmt->close();
        http_response_code(500);
        echo json_encode(['success' => false, 'message' => 'เกิดข้อผิดพลาดในการลบสินค้า']);
    }
    exit;
}

http_response_code(405);
echo json_encode(['success' => false, 'message' => 'Method Not Allowed']);
?>