<?php
file_put_contents(sys_get_temp_dir() . '/delete_template_entry.log', date('c') . " request=" . ($_SERVER['REQUEST_URI'] ?? 'cli') . "\n", FILE_APPEND);
require_once __DIR__ . '/../config/config_enhanced.php';
file_put_contents(sys_get_temp_dir() . '/delete_template_entry.log', date('c') . " included=config_enhanced\n", FILE_APPEND);
// Avoid including legacy config.php to prevent duplicate function declarations
if (!function_exists('getConfigFromDB') && file_exists(__DIR__ . '/../config/config.php')) {
    require_once __DIR__ . '/../config/config.php';
    file_put_contents(sys_get_temp_dir() . '/delete_template_entry.log', date('c') . " included=config_php_fallback\n", FILE_APPEND);
}

if (php_sapi_name() !== 'cli') header('Content-Type: application/json; charset=utf-8');

// Global exception/shutdown handlers to capture fatal errors during HTTP execution
set_exception_handler(function($e){
    if (function_exists('writeLog')) writeLog('ERROR', 'Unhandled exception in delete_template.php', ['message'=>$e->getMessage(), 'trace'=>$e->getTraceAsString()]);
    if (php_sapi_name() !== 'cli') http_response_code(500);
    echo json_encode(['success'=>false,'error'=>$e->getMessage()]);
    exit;
});
register_shutdown_function(function(){
    $err = error_get_last();
    if ($err) {
        if (function_exists('writeLog')) writeLog('ERROR', 'Shutdown error in delete_template.php', ['error' => $err]);
        if (php_sapi_name() !== 'cli') {
            http_response_code(500);
            echo json_encode(['success'=>false,'error'=>$err['message']]);
        }
    }
});

// Bypass authentication when debug=true is provided in query string
$debugMode = isset($_GET['debug']) && $_GET['debug'] === 'true';
if (!$debugMode && function_exists('requireAuthentication')) {
    requireAuthentication();
}

$input = json_decode(file_get_contents('php://input'), true) ?: $_POST;

// Debug log
if (function_exists('writeLog')) writeLog('INFO', 'delete_template.php start', ['raw_input' => $input, 'query' => $_GET]);

// Allow single id or array of ids
$ids = [];
if (isset($input['id'])) {
    if (is_array($input['id'])) {
        $ids = array_map('intval', $input['id']);
    } else {
        $ids = [intval($input['id'])];
    }
}

if (empty($ids) || array_filter($ids) === []) {
    http_response_code(400);
    echo json_encode(['success' => false, 'error' => 'id is required']);
    exit;
}

if (function_exists('writeLog')) writeLog('INFO', 'delete_template.php parsed ids', ['ids' => $ids]);

try {
    $db = Database::getInstance();

    // Verify existence
    $placeholders = implode(',', array_fill(0, count($ids), '?'));
    $existing = $db->fetchAll("SELECT id, name, template_name FROM message_templates WHERE id IN ($placeholders)", $ids);
    if (!$existing) {
        http_response_code(404);
        echo json_encode(['success' => false, 'error' => 'No templates found for given id(s)']);
        exit;
    }

    // Start transaction
    $db->beginTransaction();
    try {
        $db->execute("DELETE FROM message_templates WHERE id IN ($placeholders)", $ids);

        // Log operator activity if session present
        try {
            $operatorId = $_SESSION['admin_user']['id'] ?? null;
            $now = date('Y-m-d H:i:s');
            foreach ($existing as $t) {
                $db->insert('operator_activity', [
                    'user_id' => null,
                    'operator_id' => $operatorId,
                    'action' => 'delete_template',
                    'details' => 'Deleted template: ' . ($t['name'] ?? $t['template_name'] ?? $t['id']),
                    'created_at' => $now
                ]);
            }
        } catch (Exception $e) {
            // ignore logging errors
        }

        $db->commit();

        echo json_encode(['success' => true, 'deleted' => array_map(function($t){ return $t['id']; }, $existing)]);
    } catch (Exception $e) {
        $db->rollback();
        http_response_code(500);
        echo json_encode(['success' => false, 'error' => 'Failed to delete templates: ' . $e->getMessage()]);
    }
} catch (Exception $e) {
    http_response_code(500);
    echo json_encode(['success' => false, 'error' => $e->getMessage()]);
}
