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

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

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

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

function celulares_add_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_add_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_add_first_upload(array &$errors): string
{
    if (empty($_FILES['imagefile']['name'])) {
        return '';
    }

    $file = $_FILES['imagefile'];
    if (is_array($file['name'])) {
        $index = null;
        foreach ($file['name'] as $i => $name) {
            if ($name !== '') {
                $index = $i;
                break;
            }
        }
        if ($index === null) {
            return '';
        }
        $file = [
            'name' => $file['name'][$index],
            'type' => $file['type'][$index],
            'tmp_name' => $file['tmp_name'][$index],
            'error' => $file['error'][$index],
            'size' => $file['size'][$index],
        ];
    }

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

    $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 '';
    }

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

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

    $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 '';
    }

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

$errors = [];

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

$adjunto = celulares_add_first_upload($errors);

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

    $columns = '`TELEFONO`, `MONTO_TOTAL_SIN_IGV`, `MONTO_TOTAL_CON_IGV`, `FECHA_DE_RECIBO`, `MES`, `PLAN`, `RESPONSABLE`, `UBICACION`, `AREA`, `EQUIPO`, `SISTEMA_OPERATIVO`, `IMEI`, `MARCA`, `FECHA_DE_COMPRA`, `FECHA_DE_ACTIVACION_CHIP`, `ESTADO`, `CON_O_SIN_EQUIPO`, `FECHA_DE_RENOVACION`, `COBRANZAS_DIFERIDAS`, `PENALIDAD`, `RECONEXION_POR_MOROSIDAD_SIN_IGV`, `RECONEXION_POR_MOROSIDAD_CON_IGV`, `CAMBIO_DE_NUMERO`, `CAMBIO_DE_NUMERO_CON_IGV`, `adjunto1`';
    $placeholders = rtrim(str_repeat('?, ', count($fields)), ', ');
    $sql = "INSERT INTO `celulares` ($columns) VALUES ($placeholders)";
    $stmt = mysqli_prepare($con, $sql);

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

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