<?php
/**
 * Identitatea QZ (certificat + cheie privată) — export/import între instalări.
 *
 * Scop: ca toate domeniile tale să folosească ACELAȘI certificat → un singur
 * override.crt aprobat o dată per PC merge pe toate site-urile.
 *
 *   GET  ?download=1  → descarcă identitatea ca fișier .qzkey (JSON: cert + key)
 *   POST (file=identity, csrf_token) → importă identitatea (o setează peste tot)
 *
 * NU atinge datele aplicației — doar certificatul/cheia.
 */
require_once __DIR__ . '/../includes/qz.php';

// ---- Import (POST) ----
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (!csrf_check($_POST['csrf_token'] ?? null)) {
        json_response(['ok' => false, 'error' => 'CSRF invalid'], 403);
    }
    if (empty($_FILES['identity']['tmp_name']) || !is_uploaded_file($_FILES['identity']['tmp_name'])) {
        json_response(['ok' => false, 'error' => 'Niciun fișier încărcat.'], 422);
    }
    $raw = (string)@file_get_contents($_FILES['identity']['tmp_name']);
    [$cert, $key] = qz_parse_identity($raw);
    if ($cert && !$key) {
        json_response(['ok' => false, 'error' => 'Ai încărcat doar certificatul public (override.crt) — nu conține cheia privată, deci nu se poate semna cu el. Încarcă identitatea completă (.qzkey din Setări → „Descarcă cheia QZ", sau fișierele cert + private-key din data/qz/) de pe site-ul care funcționează.'], 422);
    }
    if (!$cert || !$key) {
        json_response(['ok' => false, 'error' => 'Fișier invalid. Acceptă .qzkey (JSON) sau PEM cu CERTIFICATE + PRIVATE KEY.'], 422);
    }
    // Validează că cheia se potrivește cu certificatul.
    if (!@openssl_x509_check_private_key($cert, $key)) {
        json_response(['ok' => false, 'error' => 'Cheia nu se potrivește cu certificatul.'], 422);
    }
    qz_set_identity($cert, $key); // DB + fișiere
    json_response(['ok' => true]);
}

// ---- Export (GET) ----
try {
    qz_ensure_keypair();
    $bundle = json_encode([
        'cert' => qz_certificate(),
        'key'  => file_get_contents(qz_key_path()),
    ], JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);

    if (isset($_GET['download'])) {
        header('Content-Type: application/octet-stream');
        header('Content-Disposition: attachment; filename="qz-identity.qzkey"');
        header('Content-Length: ' . strlen($bundle));
    } else {
        header('Content-Type: application/json; charset=utf-8');
    }
    echo $bundle;
} catch (Throwable $e) {
    error_log('[qz-identity] ' . $e->getMessage());
    json_response(['ok' => false, 'error' => $e->getMessage()], 500);
}
