<?php
require_once __DIR__ . '/../app/helpers.php';
require_once __DIR__ . '/../app/db.php';
require_once __DIR__ . '/account_lib.php';
require_login();
while (ob_get_level() > 0) { ob_end_clean(); }
header('Content-Type: application/json; charset=utf-8');

try {
    csrf_check();

    $pdo = db();
    $cid = (int)($_SESSION['company_id'] ?? 0);
    $id  = (int)($_POST['id'] ?? 0);

    if ($cid <= 0 || $id <= 0) {
        http_response_code(422);
        echo json_encode([
            'success' => false,
            'message' => 'بيانات غير صالحة.'
        ], JSON_UNESCAPED_UNICODE);
        exit;
    }

    // 1) التأكد أن الحساب موجود ويتبع نفس الشركة
    $st = $pdo->prepare("
        SELECT id, company_id, name, code, parent_id, is_locked
        FROM accounts
        WHERE id = ? AND company_id = ?
        LIMIT 1
    ");
    $st->execute([$id, $cid]);
    $account = $st->fetch(PDO::FETCH_ASSOC);

    if (!$account) {
        http_response_code(404);
        echo json_encode([
            'success' => false,
            'message' => 'الحساب غير موجود.'
        ], JSON_UNESCAPED_UNICODE);
        exit;
    }

    // 2) منع حذف الحسابات الأساسية
    if ((int)($account['is_locked'] ?? 0) === 1) {
        http_response_code(422);
        echo json_encode([
            'success' => false,
            'message' => 'لا يمكن حذف حساب أساسي.'
        ], JSON_UNESCAPED_UNICODE);
        exit;
    }

    // 3) منع حذف أي حساب له أبناء
    $st = $pdo->prepare("
        SELECT COUNT(*) 
        FROM accounts 
        WHERE company_id = ? AND parent_id = ?
    ");
    $st->execute([$cid, $id]);
    $childrenCount = (int)$st->fetchColumn();

    if ($childrenCount > 0) {
        http_response_code(422);
        echo json_encode([
            'success' => false,
            'message' => 'لا يمكن حذف الحساب لأنه يحتوي على حسابات فرعية.'
        ], JSON_UNESCAPED_UNICODE);
        exit;
    }
    // 4) منع حذف الحسابات المرتبطة بقيود أو حركات
    if (account_has_references($pdo, $cid, $id)) {
        http_response_code(422);
        echo json_encode([
            'success' => false,
            'message' => 'لا يمكن حذف الحساب لأنه مرتبط بقيود أو حركات بالنظام.'
        ], JSON_UNESCAPED_UNICODE);
        exit;
    }

    // 5) محاولة الحذف الفعلي
    $pdo->beginTransaction();

    $del = $pdo->prepare("
        DELETE FROM accounts
        WHERE id = ? AND company_id = ?
        LIMIT 1
    ");
    $del->execute([$id, $cid]);

    if ($del->rowCount() < 1) {
        $pdo->rollBack();
        http_response_code(409);
        echo json_encode([
            'success' => false,
            'message' => 'لم يتم حذف الحساب.'
        ], JSON_UNESCAPED_UNICODE);
        exit;
    }

    $pdo->commit();

    echo json_encode([
        'success' => true,
        'message' => 'تم حذف الحساب بنجاح.'
    ], JSON_UNESCAPED_UNICODE);
    exit;

} catch (PDOException $e) {
    if (isset($pdo) && $pdo->inTransaction()) {
        $pdo->rollBack();
    }

    $msg = $e->getMessage();

    // خطأ Foreign Key
    if ((int)$e->getCode() === 23000 || stripos($msg, 'foreign key constraint fails') !== false) {
        http_response_code(422);
        echo json_encode([
            'success' => false,
            'message' => 'لا يمكن حذف الحساب لأنه مرتبط بسجلات أخرى في النظام.'
        ], JSON_UNESCAPED_UNICODE);
        exit;
    }

    http_response_code(500);
    echo json_encode([
        'success' => false,
        'message' => 'خطأ بقاعدة البيانات: ' . $msg
    ], JSON_UNESCAPED_UNICODE);
    exit;

} catch (Throwable $e) {
    if (isset($pdo) && $pdo->inTransaction()) {
        $pdo->rollBack();
    }

    http_response_code(500);
    echo json_encode([
        'success' => false,
        'message' => 'خطأ غير متوقع: ' . $e->getMessage()
    ], JSON_UNESCAPED_UNICODE);
    exit;
}