<?php
require_once dirname(__FILE__) . '/../config.php';

if ($_SERVER['REQUEST_METHOD'] !== 'POST') { jsonErr(405, 'Metodo no permitido.'); }
$jwt   = auth();
$idinv = (int)$jwt['idinv'];
$b     = body();
$db    = getDB();

foreach (array('nombre','appat','rfc','correo') as $campo) {
    if (empty(trim(isset($b[$campo]) ? $b[$campo] : ''))) {
        jsonErr(400, "El campo '$campo' es requerido.");
    }
}

$rfc = strtoupper(trim($b['rfc']));

// Verificar que el RFC no exista ya como nom_usr en usuario
$stmtChk = $db->prepare('SELECT COUNT(*) FROM usuario WHERE nom_usr = ?');
$stmtChk->execute(array($rfc));
if ((int)$stmtChk->fetchColumn() > 0) { jsonErr(409, 'El RFC ya esta registrado.'); }

$db->beginTransaction();
try {
    $estampa = date('Y-m-d H:i:s');

    // Insertar en inversionista — columnas confirmadas del servidor real:
    // id_inver, rfc, idprom, centros_idcd, estatus_idestatus, appat, apmat, nombre,
    // fecha_nac, edociv_idedociv, domicilio, colonia, sector, ciudad, estados_idestado,
    // pais_idpais, cp, tel1, tel2, email, sexo, nocuenta, banco_idbanco, estampa,
    // referencia, wa, isVip, depo, tipo
    $db->prepare(
        'INSERT INTO inversionista
         (nombre, appat, apmat, rfc, email, tel1, tel2,
          domicilio, colonia, cp, ciudad,
          estados_idestado, pais_idpais, edociv_idedociv,
          nocuenta, banco_idbanco,
          idprom, estatus_idestatus, isVip, tipo, depo, estampa)
         VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,1,0,"distribuidor","banco",?)'
    )->execute(array(
        trim($b['nombre']),
        trim($b['appat']),
        trim($b['apmat'] ?? ''),
        $rfc,
        trim($b['correo']),
        trim($b['telefono'] ?? ''),
        trim($b['celular'] ?? ''),
        trim($b['calle'] ?? ''),
        trim($b['colonia'] ?? ''),
        trim($b['cp'] ?? ''),
        trim($b['ciudad'] ?? ''),
        (int)($b['estados_idestados'] ?? null),
        (int)($b['pais_idpais'] ?? 1),
        (int)($b['edociv_idedociv'] ?? null),
        trim($b['no_cuenta'] ?? ''),
        (int)($b['banco_idbanco'] ?? null),
        $idinv,
        $estampa,
    ));
    $nuevoId    = (int)$db->lastInsertId();
    $referencia = calcRef($nuevoId);

    // Actualizar referencia — PK real: id_inver
    $db->prepare('UPDATE inversionista SET referencia = ? WHERE id_inver = ?')
       ->execute(array($referencia, $nuevoId));

    // Crear usuario — columnas confirmadas: rango_idrango, inversionista_id_inver, nom_usr, passw
    $passInicial = str_pad((string)rand(0, 999999), 6, '0', STR_PAD_LEFT);
    $db->prepare(
        'INSERT INTO usuario (rango_idrango, inversionista_id_inver, nom_usr, passw)
         VALUES (3,?,?,?)'
    )->execute(array($nuevoId, $rfc, $passInicial));

    $db->commit();
    jsonOk(array(
        'idinv'            => $nuevoId,
        'referencia'       => $referencia,
        'nombre_usuario'   => $rfc,
        'password_inicial' => $passInicial,
        'mensaje'          => 'Distribuidor registrado. Contrasena inicial: ' . $passInicial,
    ), 201);
} catch (Exception $e) {
    $db->rollBack();
    jsonErr(500, 'Error al registrar: ' . $e->getMessage());
}
