<?php
require_once '../../config.php';

header('Content-Type: application/json; charset=utf-8');

// 处理 OPTIONS 预检请求
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
    http_response_code(200);
    exit;
}

if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    http_response_code(405);
    echo json_encode([
        'error' => true,
        'message' => 'Only POST requests are supported'
    ], JSON_UNESCAPED_UNICODE);
    exit;
}

try {
    $input = file_get_contents('php://input');
    $data = json_decode($input, true);

    if (!$data) {
        throw new Exception("Invalid JSON data");
    }

    $websiteId = isset($data['websiteId']) ? intval($data['websiteId']) : null;
    $bankSorts = isset($data['bankSorts']) ? $data['bankSorts'] : [];

    if (!$websiteId) {
        throw new Exception("Missing required field: websiteId");
    }

    if (empty($bankSorts) || !is_array($bankSorts)) {
        throw new Exception("Missing or invalid field: bankSorts");
    }

    $websiteIdEscaped = intval($websiteId);

    // 开始事务
    mysqli_begin_transaction($conn);

    // 更新或插入排序数据
    foreach ($bankSorts as $index => $bankSort) {
        $bankName = isset($bankSort['BankName']) ? mysqli_real_escape_string($conn, $bankSort['BankName']) : '';
        $sortOrder = isset($bankSort['SortOrder']) ? intval($bankSort['SortOrder']) : $index;
        
        // 处理 Category: 如果为 null、空字符串或只包含空格，则设为 NULL
        $categoryValue = isset($bankSort['Category']) ? trim($bankSort['Category']) : '';
        $category = (!empty($categoryValue) && $categoryValue !== '') 
            ? "'" . mysqli_real_escape_string($conn, $categoryValue) . "'"
            : 'NULL';
            
        $isHidden = isset($bankSort['IsHidden']) ? (intval($bankSort['IsHidden']) ? 1 : 0) : 0;
        $isBSheet = isset($bankSort['IsBSheet']) ? (intval($bankSort['IsBSheet']) ? 1 : 0) : 0;

        if (empty($bankName)) {
            continue;
        }

        $query = "INSERT INTO BankSort (WebsiteID, BankName, SortOrder, Category, IsHidden, IsBSheet)
                  VALUES ($websiteIdEscaped, '$bankName', $sortOrder, $category, $isHidden, $isBSheet)
                  ON DUPLICATE KEY UPDATE 
                    SortOrder = $sortOrder,
                    Category = $category,
                    IsHidden = $isHidden,
                    IsBSheet = $isBSheet";

        if (!mysqli_query($conn, $query)) {
            throw new Exception("Failed to save sort order for bank '$bankName': " . mysqli_error($conn));
        }
    }

    // 提交事务
    mysqli_commit($conn);

    echo json_encode([
        'success' => true,
        'message' => 'Sort order saved successfully'
    ], JSON_UNESCAPED_UNICODE);
} catch (Exception $e) {
    mysqli_rollback($conn);
    http_response_code(500);
    echo json_encode([
        'error' => true,
        'success' => false,
        'message' => $e->getMessage()
    ], JSON_UNESCAPED_UNICODE);
}

mysqli_close($conn);
