<?php
require_once '../../config/config.php';

header('Content-Type: application/json');

function respond($ok, $msg, $extra = []) {
    echo json_encode(($ok ? ['status' => 'success'] : ['status' => 'error']) + ['message' => $msg] + $extra);
    exit;
}

try {
    $method = $_SERVER['REQUEST_METHOD'];
    
    switch ($method) {
        case 'GET':
            handleRead();
            break;
        case 'POST':
            handleCreate();
            break;
        case 'PUT':
            handleUpdate();
            break;
        case 'DELETE':
            handleDelete();
            break;
        default:
            respond(false, 'Method not allowed');
    }
} catch (Exception $e) {
    respond(false, $e->getMessage());
}

function handleRead() {
    global $pdo;
    
    $examDate = $_GET['exam_date'] ?? '';
    $session = $_GET['session'] ?? '';
    $staffId = $_GET['staff_id'] ?? '';
    $status = $_GET['status'] ?? '';
    
    $where = [];
    $params = [];
    
    if ($examDate) {
        $where[] = "s.exam_date = ?";
        $params[] = $examDate;
    }
    if ($session) {
        $where[] = "s.session = ?";
        $params[] = $session;
    }
    if ($staffId) {
        $where[] = "s.staff_id = ?";
        $params[] = $staffId;
    }
    if ($status) {
        $where[] = "s.status = ?";
        $params[] = $status;
    }
    
    $whereClause = $where ? 'WHERE ' . implode(' AND ', $where) : '';
    
    $sql = "
        SELECT s.*, 
               st.first_name, st.last_name, st.staff_code
        FROM squads s
        LEFT JOIN staff st ON s.staff_id = st.staff_id
        $whereClause
        ORDER BY s.exam_date DESC, s.session, s.squad_name
    ";
    
    $stmt = $pdo->prepare($sql);
    $stmt->execute($params);
    $data = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
    respond(true, 'Squad data retrieved successfully', ['data' => $data]);
}

function handleCreate() {
    global $pdo;
    
    $input = json_decode(file_get_contents('php://input'), true);
    
    $squadName = $input['squad_name'] ?? '';
    $examDate = $input['exam_date'] ?? '';
    $session = $input['session'] ?? '';
    $staffId = $input['staff_id'] ?? '';
    $status = $input['status'] ?? 'Active';
    
    if (!$squadName || !$examDate || !$session || !$staffId) {
        respond(false, 'Missing required fields: squad_name, exam_date, session, staff_id');
    }
    
    // Check if staff already assigned to squad on this date/session
    $checkStmt = $pdo->prepare("
        SELECT squad_id FROM squads 
        WHERE exam_date = ? AND session = ? AND staff_id = ?
    ");
    $checkStmt->execute([$examDate, $session, $staffId]);
    if ($checkStmt->fetch()) {
        respond(false, 'Staff already assigned to squad on this date/session');
    }
    
    $sql = "
        INSERT INTO squads 
        (squad_name, exam_date, session, staff_id, status) 
        VALUES (?, ?, ?, ?, ?)
    ";
    
    $stmt = $pdo->prepare($sql);
    $result = $stmt->execute([$squadName, $examDate, $session, $staffId, $status]);
    
    if ($result) {
        respond(true, 'Squad member created successfully', ['squad_id' => $pdo->lastInsertId()]);
    } else {
        respond(false, 'Failed to create squad member');
    }
}

function handleUpdate() {
    global $pdo;
    
    $input = json_decode(file_get_contents('php://input'), true);
    $squadId = $input['squad_id'] ?? '';
    
    if (!$squadId) {
        respond(false, 'Squad ID is required');
    }
    
    $fields = [];
    $params = [];
    
    $allowedFields = ['squad_name', 'exam_date', 'session', 'staff_id', 'status'];
    
    foreach ($allowedFields as $field) {
        if (isset($input[$field])) {
            $fields[] = "$field = ?";
            $params[] = $input[$field];
        }
    }
    
    if (empty($fields)) {
        respond(false, 'No fields to update');
    }
    
    $params[] = $squadId;
    
    $sql = "UPDATE squads SET " . implode(', ', $fields) . " WHERE squad_id = ?";
    $stmt = $pdo->prepare($sql);
    $result = $stmt->execute($params);
    
    if ($result) {
        respond(true, 'Squad member updated successfully');
    } else {
        respond(false, 'Failed to update squad member');
    }
}

function handleDelete() {
    global $pdo;
    
    $input = json_decode(file_get_contents('php://input'), true);
    $squadId = $input['squad_id'] ?? '';
    
    if (!$squadId) {
        respond(false, 'Squad ID is required');
    }
    
    $stmt = $pdo->prepare("DELETE FROM squads WHERE squad_id = ?");
    $result = $stmt->execute([$squadId]);
    
    if ($result) {
        respond(true, 'Squad member deleted successfully');
    } else {
        respond(false, 'Failed to delete squad member');
    }
}
?>
