<?php
declare(strict_types=1);
// kyc/upload.php — Sube un documento KYC del distribuidor
// subTipo: 1=comprobante domicilio, 2=identificacion, 3=estado cuenta, 4=fotografia
header('Content-Type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Headers: Authorization, Content-Type');
header('Access-Control-Allow-Methods: POST, OPTIONS');
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { http_response_code(200); exit; }

require_once __DIR__ . '/../config.php';

// Auth usando la función del servidor
$jwt      = auth();
$id_inver = (int)$jwt['idinv'];

// Validar método
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    jsonErr(405, 'Método no permitido.');
}

// Validar subTipo
$subTipo = (int)($_POST['subTipo'] ?? 0);
if ($subTipo < 1 || $subTipo > 4) {
    jsonErr(400, 'subTipo inválido. Valores: 1=domicilio, 2=identificacion, 3=banco, 4=fotografia');
}

// Validar archivo
if (!isset($_FILES['archivo']) || $_FILES['archivo']['error'] !== UPLOAD_ERR_OK) {
    $errCode = $_FILES['archivo']['error'] ?? -1;
    jsonErr(400, 'No se recibió el archivo. Código de error: ' . $errCode);
}

$file    = $_FILES['archivo'];
$origName = basename($file['name']);
$ext     = strtolower(pathinfo($origName, PATHINFO_EXTENSION));
$allowed = ['jpg', 'jpeg', 'png', 'pdf', 'heic'];
if (!in_array($ext, $allowed)) {
    jsonErr(400, 'Tipo de archivo no permitido. Use: jpg, jpeg, png, pdf, heic');
}

// Crear directorio de uploads
$uploadDir = __DIR__ . '/../../uploads/kyc/' . $id_inver . '/';
if (!is_dir($uploadDir)) {
    mkdir($uploadDir, 0755, true);
}

$newName  = 'kyc_' . $id_inver . '_sub' . $subTipo . '_' . time() . '.' . $ext;
$destPath = $uploadDir . $newName;

if (!move_uploaded_file($file['tmp_name'], $destPath)) {
    jsonErr(500, 'Error al guardar el archivo en el servidor.');
}

$fileUrl = 'https://api.sistemarrb.com/uploads/kyc/' . $id_inver . '/' . $newName;

// Registrar en BD
$db = getDB();
try {
    // Eliminar registro anterior del mismo subTipo
    $stmt = $db->prepare("DELETE FROM archivo WHERE id_inver = ? AND subTipo = ? AND tipo = 1");
    $stmt->execute([$id_inver, $subTipo]);

    // Insertar nuevo registro
    $stmt = $db->prepare(
        "INSERT INTO archivo (id_inver, nombre, realName, tipo, subTipo, fechaCreacion, status)
         VALUES (?, ?, ?, 1, ?, NOW(), 0)"
    );
    $stmt->execute([$id_inver, $fileUrl, $origName, $subTipo]);
    $archivoId = $db->lastInsertId();

    // Si el distribuidor no está verificado, marcar como en revisión (isVip=2)
    $stmt = $db->prepare(
        "UPDATE inversionista SET isVip = 2 WHERE id_inver = ? AND (isVip = 0 OR isVip IS NULL)"
    );
    $stmt->execute([$id_inver]);

    jsonOk([
        'archivo_id' => (int)$archivoId,
        'file_url'   => $fileUrl,
        'subTipo'    => $subTipo,
        'message'    => 'Documento subido correctamente.',
    ]);
} catch (Throwable $e) {
    jsonErr(500, 'Error de base de datos: ' . $e->getMessage());
}
