<?php
session_start();
header('Content-Type: text/html; charset=utf-8');

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

function celulares_value(string $key): string
{
    return trim((string)($_POST[$key] ?? ''));
}

function celulares_date(string $key): string
{
    $value = celulares_value($key);
    return $value !== '' ? $value : '0000-00-00';
}

function celulares_alert(string $type, string $title, string $message): void
{
    echo '<div class="alert alert-' . $type . '" role="alert">';
    echo '<button type="button" class="close" data-dismiss="alert">&times;</button>';
    echo '<strong>' . $title . '</strong> ' . $message;
    echo '</div>';
}

function celulares_bind(mysqli_stmt $stmt, string $types, array &$params): bool
{
    $refs = [];
    foreach ($params as $key => &$value) {
        $refs[$key] = &$value;
    }
    array_unshift($refs, $types);
    return mysqli_stmt_bind_param($stmt, ...$refs);
}

function celulares_upload(?array $file, array &$errors): ?string
{
    if (!$file || empty($file['name']) || (int)$file['error'] === UPLOAD_ERR_NO_FILE) {
        return null;
    }

    if ((int)$file['error'] !== UPLOAD_ERR_OK) {
        $errors[] = 'No se pudo cargar el archivo adjunto.';
        return null;
    }

    $extension = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION));
    $allowed = ['doc', 'docx', 'xls', 'xlsx', 'pdf', 'zip', 'jpg', 'jpeg', 'png'];
    if (!in_array($extension, $allowed, true)) {
        $errors[] = 'Solo se permiten archivos DOC, DOCX, XLS, XLSX, PDF, ZIP, JPG, JPEG y PNG.';
        return null;
    }

    if ((int)$file['size'] > 10485760) {
        $errors[] = 'El archivo es demasiado grande. Selecciona un archivo menor a 10MB.';
        return null;
    }

    $targetDir = realpath(__DIR__ . '/../../Documentos/Datos');
    if ($targetDir === false) {
        $errors[] = 'No existe la carpeta Documentos/Datos para guardar adjuntos.';
        return null;
    }

    $newName = uniqid('cel_', true) . '.' . $extension;
    $targetPath = $targetDir . DIRECTORY_SEPARATOR . $newName;
    if (!move_uploaded_file($file['tmp_name'], $targetPath)) {
        $errors[] = 'La carga del archivo fallo. Intente nuevamente.';
        return null;
    }

    return 'Documentos/Datos/' . $newName;
}

$errors = [];
$id = (int)($_POST['id'] ?? 0);

if ($id <= 0) {
    $errors[] = 'Registro invalido.';
}

if (celulares_value('TELEFONO') === '') {
    $errors[] = 'El telefono es obligatorio.';
}

if (!$errors) {
    $fields = [
        'TELEFONO' => celulares_value('TELEFONO'),
        'MONTO_TOTAL_SIN_IGV' => celulares_value('MONTO_TOTAL_SIN_IGV'),
        'MONTO_TOTAL_CON_IGV' => celulares_value('MONTO_TOTAL_CON_IGV'),
        'FECHA_DE_RECIBO' => celulares_date('FECHA_DE_RECIBO'),
        'MES' => celulares_value('MES'),
        'PLAN' => celulares_value('PLAN'),
        'RESPONSABLE' => celulares_value('RESPONSABLE'),
        'UBICACION' => celulares_value('UBICACION'),
        'AREA' => celulares_value('AREA'),
        'EQUIPO' => celulares_value('EQUIPO'),
        'SISTEMA_OPERATIVO' => celulares_value('SISTEMA_OPERATIVO'),
        'IMEI' => celulares_value('IMEI'),
        'MARCA' => celulares_value('MARCA'),
        'FECHA_DE_COMPRA' => celulares_date('FECHA_DE_COMPRA'),
        'FECHA_DE_ACTIVACION_CHIP' => celulares_date('FECHA_DE_ACTIVACION_CHIP'),
        'ESTADO' => celulares_value('ESTADO'),
        'CON_O_SIN_EQUIPO' => celulares_value('CON_O_SIN_EQUIPO'),
        'FECHA_DE_RENOVACION' => celulares_date('FECHA_DE_RENOVACION'),
        'COBRANZAS_DIFERIDAS' => celulares_value('COBRANZAS_DIFERIDAS'),
        'PENALIDAD' => celulares_value('PENALIDAD'),
        'RECONEXION_POR_MOROSIDAD_SIN_IGV' => celulares_value('RECONEXION_POR_MOROSIDAD_SIN_IGV'),
        'RECONEXION_POR_MOROSIDAD_CON_IGV' => celulares_value('RECONEXION_POR_MOROSIDAD_CON_IGV'),
        'CAMBIO_DE_NUMERO' => celulares_value('CAMBIO_DE_NUMERO'),
        'CAMBIO_DE_NUMERO_CON_IGV' => celulares_value('CAMBIO_DE_NUMERO_CON_IGV'),
    ];

    $uploaded = celulares_upload($_FILES['imagefile'] ?? null, $errors);
    if ($uploaded !== null) {
        $fields['adjunto1'] = $uploaded;
    }
}

if (!$errors) {
    $sets = [];
    foreach (array_keys($fields) as $column) {
        $sets[] = "`$column` = ?";
    }

    $sql = 'UPDATE `celulares` SET ' . implode(', ', $sets) . ' WHERE `id` = ?';
    $stmt = mysqli_prepare($con, $sql);

    if ($stmt) {
        $params = array_values($fields);
        $params[] = $id;
        $types = str_repeat('s', count($fields)) . 'i';
        celulares_bind($stmt, $types, $params);

        if (mysqli_stmt_execute($stmt)) {
            celulares_alert('success', '&iexcl;Bien hecho!', 'El celular ha sido actualizado satisfactoriamente.');
            echo "<script>setTimeout(function(){ window.location='./?view=celulares'; }, 800);</script>";
        } else {
            $errors[] = 'No se pudo actualizar el registro: ' . mysqli_error($con);
        }
        mysqli_stmt_close($stmt);
    } else {
        $errors[] = 'No se pudo preparar la actualizacion: ' . mysqli_error($con);
    }
}

if ($errors) {
    celulares_alert('danger', 'Error!', implode('<br>', array_map(static fn($error) => htmlspecialchars($error, ENT_QUOTES, 'UTF-8'), $errors)));
}