<?php
// Mağaza Yönetimi API'si
// Mağazaları veritabanında saklar ve tüm cihazlara senkronize eder

header('Content-Type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type, Authorization, X-Requested-With');

if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
    http_response_code(200);
    exit();
}

require_once '../config/database.php';

// Veritabanı bağlantısı
$host = "localhost";
$username = "hemensuc_admin";
$password = "okanbeyin.2002";
$database = "hemensuc_database";

try {
    $pdo = new PDO("mysql:host=$host;dbname=$database;charset=utf8mb4", $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch (PDOException $e) {
    http_response_code(500);
    echo json_encode(['success' => false, 'error' => 'Veritabanı bağlantı hatası']);
    exit();
}


// Token doğrulama fonksiyonu
function validateToken($pdo, $token) {
    if (empty($token)) return null;
    
    try {
        $stmt = $pdo->prepare("
            SELECT u.* FROM users u 
            JOIN user_sessions s ON u.id = s.user_id 
            WHERE s.session_token = ? AND s.expires_at > NOW() AND u.status = 'active'
        ");
        $stmt->execute([$token]);
        return $stmt->fetch();
    } catch (PDOException $e) {
        return null;
    }
}

// JSON input
$input = json_decode(file_get_contents('php://input'), true);
$method = $_SERVER['REQUEST_METHOD'];
$token = $input['token'] ?? $_GET['token'] ?? null;

// Token doğrula
$user = validateToken($pdo, $token);
if (!$user) {
    http_response_code(401);
    echo json_encode(['success' => false, 'error' => 'Geçersiz veya süresi dolmuş token']);
    exit();
}


try {
    switch ($method) {
        case 'GET':
            // Tüm mağazaları listele (Tüm kullanıcılar görebilir)
            $stmt = $pdo->prepare("SELECT * FROM stores WHERE is_deleted = 0 ORDER BY name");
            $stmt->execute();
            $stores = $stmt->fetchAll();
            
            // Boolean değerleri düzelt
            foreach ($stores as &$store) {
                $store['is_active'] = (bool)$store['is_active'];
                $store['is_deleted'] = (bool)$store['is_deleted'];
            }
            
            echo json_encode(['success' => true, 'data' => $stores]);
            break;
            
        case 'POST':
            // Yeni mağaza ekle (Sadece admin/manager)
            if (!in_array($user['role'], ['admin', 'manager'])) {
                http_response_code(403);
                echo json_encode(['success' => false, 'error' => 'Bu işlem için yetkiniz yok']);
                exit();
            }
            
            $required = ['store_id', 'name', 'api_key', 'api_secret'];
            foreach ($required as $field) {
                if (empty($input[$field])) {
                    http_response_code(400);
                    echo json_encode(['success' => false, 'error' => "Eksik alan: $field"]);
                    exit();
                }
            }

            // Mağaza zaten var mı kontrol et
            $stmt = $pdo->prepare("SELECT id FROM stores WHERE store_id = ?");
            $stmt->execute([$input['store_id']]);
            if ($stmt->fetch()) {
                http_response_code(400);
                echo json_encode(['success' => false, 'error' => 'Bu ID ile mağaza zaten mevcut']);
                exit();
            }
            
            // Mağazayı ekle
            $stmt = $pdo->prepare("
                INSERT INTO stores (store_id, name, api_key, api_secret, is_active, created_by) 
                VALUES (?, ?, ?, ?, 1, ?)
            ");
            $stmt->execute([
                $input['store_id'],
                $input['name'],
                $input['api_key'],
                $input['api_secret'],
                $user['id']
            ]);
            
            echo json_encode([
                'success' => true, 
                'message' => 'Mağaza başarıyla eklendi',
                'data' => ['id' => $pdo->lastInsertId(), 'store_id' => $input['store_id']]
            ]);
            break;

        case 'PUT':
            // Mağaza güncelle (Sadece admin/manager)
            if (!in_array($user['role'], ['admin', 'manager'])) {
                http_response_code(403);
                echo json_encode(['success' => false, 'error' => 'Bu işlem için yetkiniz yok']);
                exit();
            }
            
            if (empty($input['store_id'])) {
                http_response_code(400);
                echo json_encode(['success' => false, 'error' => 'Mağaza ID gerekli']);
                exit();
            }
            
            $updates = [];
            $params = [];
            
            if (isset($input['name'])) { $updates[] = "name = ?"; $params[] = $input['name']; }
            if (isset($input['api_key'])) { $updates[] = "api_key = ?"; $params[] = $input['api_key']; }
            if (isset($input['api_secret'])) { $updates[] = "api_secret = ?"; $params[] = $input['api_secret']; }
            if (isset($input['is_active'])) { $updates[] = "is_active = ?"; $params[] = $input['is_active'] ? 1 : 0; }
            
            if (empty($updates)) {
                http_response_code(400);
                echo json_encode(['success' => false, 'error' => 'Güncellenecek alan yok']);
                exit();
            }
            
            $params[] = $input['store_id'];
            $sql = "UPDATE stores SET " . implode(", ", $updates) . " WHERE store_id = ?";
            $stmt = $pdo->prepare($sql);
            $stmt->execute($params);
            
            echo json_encode(['success' => true, 'message' => 'Mağaza güncellendi']);
            break;

        case 'DELETE':
            // Mağaza sil (Sadece admin)
            if ($user['role'] !== 'admin') {
                http_response_code(403);
                echo json_encode(['success' => false, 'error' => 'Bu işlem için admin yetkisi gerekli']);
                exit();
            }
            
            if (empty($input['store_id'])) {
                http_response_code(400);
                echo json_encode(['success' => false, 'error' => 'Mağaza ID gerekli']);
                exit();
            }
            
            // Soft delete
            $stmt = $pdo->prepare("UPDATE stores SET is_deleted = 1 WHERE store_id = ?");
            $stmt->execute([$input['store_id']]);
            
            echo json_encode(['success' => true, 'message' => 'Mağaza silindi']);
            break;
            
        default:
            http_response_code(405);
            echo json_encode(['success' => false, 'error' => 'Desteklenmeyen HTTP metodu']);
    }
} catch (Exception $e) {
    http_response_code(500);
    echo json_encode(['success' => false, 'error' => 'Sunucu hatası: ' . $e->getMessage()]);
}
?>
