<?php
/**
 * IoT Logs API
 * View and manage device logs
 */

header('Content-Type: application/json');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, DELETE');

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

try {
    $database = new Database();
    $db = $database->getConnection();
    
    if (!$db) {
        throw new Exception('Database connection failed');
    }
    
    $method = $_SERVER['REQUEST_METHOD'];
    
    // GET: Retrieve logs
    if ($method === 'GET') {
        $device_id = $_GET['device_id'] ?? null;
        $log_type = $_GET['log_type'] ?? null;
        $limit = $_GET['limit'] ?? 100;
        $date_from = $_GET['date_from'] ?? null;
        $date_to = $_GET['date_to'] ?? null;
        
        $query = "SELECT l.*, d.device_name 
                  FROM iot_logs l
                  LEFT JOIN iot_devices d ON l.device_id = d.device_id
                  WHERE 1=1";
        $params = [];
        
        if ($device_id) {
            $query .= " AND l.device_id = ?";
            $params[] = $device_id;
        }
        
        if ($log_type) {
            $query .= " AND l.log_type = ?";
            $params[] = $log_type;
        }
        
        if ($date_from) {
            $query .= " AND l.created_at >= ?";
            $params[] = $date_from;
        }
        
        if ($date_to) {
            $query .= " AND l.created_at <= ?";
            $params[] = $date_to;
        }
        
        $query .= " ORDER BY l.created_at DESC LIMIT " . (int)$limit;
        
        $stmt = $db->prepare($query);
        $stmt->execute($params);
        $logs = $stmt->fetchAll(PDO::FETCH_ASSOC);
        
        foreach ($logs as &$log) {
            $log['data'] = json_decode($log['data'], true);
        }
        
        // Check if device is online (last_seen within 30 seconds)
        $device_online = false;
        if ($device_id) {
            $status_query = "SELECT 
                            CASE 
                                WHEN TIMESTAMPDIFF(SECOND, last_seen, NOW()) <= 30 THEN 1
                                ELSE 0
                            END as is_online
                            FROM iot_devices 
                            WHERE device_id = ?";
            $status_stmt = $db->prepare($status_query);
            $status_stmt->execute([$device_id]);
            $status_result = $status_stmt->fetch(PDO::FETCH_ASSOC);
            $device_online = $status_result ? (bool)$status_result['is_online'] : false;
        }
        
        echo json_encode([
            'success' => true, 
            'logs' => $logs, 
            'count' => count($logs),
            'device_online' => $device_online
        ]);
    }
    
    // DELETE: Clear old logs
    elseif ($method === 'DELETE') {
        parse_str(file_get_contents("php://input"), $_DELETE);
        $days = $_DELETE['days'] ?? 30;
        
        $query = "DELETE FROM iot_logs WHERE created_at < DATE_SUB(NOW(), INTERVAL ? DAY)";
        $stmt = $db->prepare($query);
        
        if ($stmt->execute([$days])) {
            $deleted = $stmt->rowCount();
            echo json_encode(['success' => true, 'message' => "Deleted $deleted old logs"]);
        } else {
            http_response_code(500);
            echo json_encode(['success' => false, 'error' => 'Failed to delete logs']);
        }
    }
    
    else {
        http_response_code(405);
        echo json_encode(['success' => false, 'error' => 'Method not allowed']);
    }
    
} catch (Exception $e) {
    http_response_code(500);
    echo json_encode([
        'success' => false,
        'error' => $e->getMessage()
    ]);
}
?>
