<?php
header('Content-Type: application/json');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type, Authorization');

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

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

function sendResponse($success, $message, $data = null, $errorCode = null) {
    $response = [
        'success' => $success,
        'message' => $message
    ];
    
    if ($data !== null) {
        $response['data'] = $data;
    }
    
    if ($errorCode !== null) {
        $response['errorCode'] = $errorCode;
    }
    
    echo json_encode($response);
    exit;
}

function validateToken($token) {
    global $pdo;
    
    try {
        $stmt = $pdo->prepare("SELECT id, role, status FROM users WHERE token = ? AND status = 'active'");
        $stmt->execute([$token]);
        $user = $stmt->fetch(PDO::FETCH_ASSOC);
        
        return $user ? $user : false;
    } catch (Exception $e) {
        return false;
    }
}

// GET - Mağaza durumlarını getir
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
    $input = json_decode(file_get_contents('php://input'), true);
    
    if (!isset($input['token']) || empty($input['token'])) {
        sendResponse(false, 'Token gerekli', null, 'MISSING_TOKEN');
    }
    
    $user = validateToken($input['token']);
    if (!$user) {
        sendResponse(false, 'Geçersiz token veya kullanıcı pasif', null, 'INVALID_TOKEN');
    }
    
    try {
        $stmt = $pdo->prepare("SELECT store_id as storeId, is_active as isActive, updated_at as updatedAt FROM store_statuses ORDER BY store_id");
        $stmt->execute();
        $storeStatuses = $stmt->fetchAll(PDO::FETCH_ASSOC);
        
        // Boolean değerleri düzelt
        foreach ($storeStatuses as &$status) {
            $status['isActive'] = (bool)$status['isActive'];
        }
        
        sendResponse(true, 'Mağaza durumları başarıyla alındı', $storeStatuses);
        
    } catch (Exception $e) {
        sendResponse(false, 'Mağaza durumları alınırken hata oluştu: ' . $e->getMessage(), null, 'DATABASE_ERROR');
    }
}

// POST/PUT - Mağaza durumunu güncelle
if ($_SERVER['REQUEST_METHOD'] === 'POST' || $_SERVER['REQUEST_METHOD'] === 'PUT') {
    $input = json_decode(file_get_contents('php://input'), true);
    
    if (!isset($input['token']) || empty($input['token'])) {
        sendResponse(false, 'Token gerekli', null, 'MISSING_TOKEN');
    }
    
    if (!isset($input['storeId']) || empty($input['storeId'])) {
        sendResponse(false, 'Mağaza ID gerekli', null, 'MISSING_STORE_ID');
    }
    
    if (!isset($input['isActive'])) {
        sendResponse(false, 'Mağaza durumu gerekli', null, 'MISSING_STATUS');
    }
    
    $user = validateToken($input['token']);
    if (!$user) {
        sendResponse(false, 'Geçersiz token veya kullanıcı pasif', null, 'INVALID_TOKEN');
    }
    
    // Sadece admin ve manager mağaza durumunu değiştirebilir
    if (!in_array($user['role'], ['admin', 'manager'])) {
        sendResponse(false, 'Bu işlem için yetkiniz yok', null, 'INSUFFICIENT_PERMISSIONS');
    }
    
    try {
        $storeId = $input['storeId'];
        $isActive = (bool)$input['isActive'];
        $userId = $user['id'];
        
        // Mağaza durumunu güncelle veya ekle
        $stmt = $pdo->prepare("
            INSERT INTO store_statuses (store_id, is_active, updated_by, updated_at) 
            VALUES (?, ?, ?, NOW()) 
            ON DUPLICATE KEY UPDATE 
                is_active = VALUES(is_active), 
                updated_by = VALUES(updated_by), 
                updated_at = NOW()
        ");
        
        $stmt->execute([$storeId, $isActive ? 1 : 0, $userId]);
        
        // Log kaydı ekle
        $logStmt = $pdo->prepare("
            INSERT INTO store_status_logs (store_id, old_status, new_status, changed_by, changed_at) 
            VALUES (?, (SELECT is_active FROM store_statuses WHERE store_id = ? LIMIT 1), ?, ?, NOW())
        ");
        $logStmt->execute([$storeId, $storeId, $isActive ? 1 : 0, $userId]);
        
        sendResponse(true, 'Mağaza durumu başarıyla güncellendi', [
            'storeId' => $storeId,
            'isActive' => $isActive,
            'updatedBy' => $user['id']
        ]);
        
    } catch (Exception $e) {
        sendResponse(false, 'Mağaza durumu güncellenirken hata oluştu: ' . $e->getMessage(), null, 'DATABASE_ERROR');
    }
}

// DELETE - Mağaza durumunu sıfırla (aktif yap)
if ($_SERVER['REQUEST_METHOD'] === 'DELETE') {
    $input = json_decode(file_get_contents('php://input'), true);
    
    if (!isset($input['token']) || empty($input['token'])) {
        sendResponse(false, 'Token gerekli', null, 'MISSING_TOKEN');
    }
    
    if (!isset($input['storeId']) || empty($input['storeId'])) {
        sendResponse(false, 'Mağaza ID gerekli', null, 'MISSING_STORE_ID');
    }
    
    $user = validateToken($input['token']);
    if (!$user) {
        sendResponse(false, 'Geçersiz token veya kullanıcı pasif', null, 'INVALID_TOKEN');
    }
    
    // Sadece admin mağaza durumunu sıfırlayabilir
    if ($user['role'] !== 'admin') {
        sendResponse(false, 'Bu işlem için admin yetkisi gerekli', null, 'INSUFFICIENT_PERMISSIONS');
    }
    
    try {
        $storeId = $input['storeId'];
        $userId = $user['id'];
        
        // Mağaza durumunu aktif yap
        $stmt = $pdo->prepare("
            UPDATE store_statuses 
            SET is_active = 1, updated_by = ?, updated_at = NOW() 
            WHERE store_id = ?
        ");
        
        $stmt->execute([$userId, $storeId]);
        
        // Log kaydı ekle
        $logStmt = $pdo->prepare("
            INSERT INTO store_status_logs (store_id, old_status, new_status, changed_by, changed_at) 
            VALUES (?, 0, 1, ?, NOW())
        ");
        $logStmt->execute([$storeId, $userId]);
        
        sendResponse(true, 'Mağaza durumu sıfırlandı (aktif yapıldı)', [
            'storeId' => $storeId,
            'isActive' => true,
            'updatedBy' => $user['id']
        ]);
        
    } catch (Exception $e) {
        sendResponse(false, 'Mağaza durumu sıfırlanırken hata oluştu: ' . $e->getMessage(), null, 'DATABASE_ERROR');
    }
}

sendResponse(false, 'Desteklenmeyen HTTP metodu', null, 'INVALID_METHOD');
?>
