<?php
header('Content-Type: application/json; charset=utf-8');

error_reporting(E_ALL);
ini_set('display_errors', 0);

require dirname(__DIR__) . '/config.php';

function responder($ok, $mensagem, $extra, $status)
{
    http_response_code($status);

    $dados = array(
        'ok' => $ok,
        'mensagem' => $mensagem
    );

    if (!empty($extra)) {
        $dados = array_merge($dados, $extra);
    }

    echo json_encode($dados);
    exit;
}

if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    responder(false, 'Use POST.', array(), 405);
}

$token = isset($_POST['token']) ? trim($_POST['token']) : '';
$nome = isset($_POST['nome']) ? trim($_POST['nome']) : '';

if ($token === '' || !preg_match('/^[a-f0-9]{64}$/i', $token)) {
    responder(false, 'Token invalido.', array(), 400);
}

if ($nome === '') {
    $nome = 'Celular';
}

if (strlen($nome) > 100) {
    $nome = substr($nome, 0, 100);
}

try {

    $stmt = $pdo->prepare(
        'SELECT id, nome
         FROM dispositivos
         WHERE token = ?
         LIMIT 1'
    );

    $stmt->execute(array($token));

    $existente = $stmt->fetch();

    if ($existente) {

        $stmt = $pdo->prepare(
            'UPDATE dispositivos
             SET nome = ?,
                 ativo = 1
             WHERE id = ?'
        );

        $stmt->execute(
            array(
                $nome,
                (int)$existente['id']
            )
        );

        responder(
            true,
            'Dispositivo ja cadastrado.',
            array(
                'dispositivo_id' => (int)$existente['id'],
                'nome' => $nome
            ),
            200
        );
    }

    $stmt = $pdo->prepare(
        'INSERT INTO dispositivos
        (
            nome,
            token,
            ativo,
            compartilhamento_ativo,
            criado_em
        )
        VALUES
        (?, ?, 1, 1, NOW())'
    );

    $stmt->execute(
        array(
            $nome,
            $token
        )
    );

    responder(
        true,
        'Dispositivo cadastrado com sucesso.',
        array(
            'dispositivo_id' => (int)$pdo->lastInsertId(),
            'nome' => $nome
        ),
        201
    );

} catch (Exception $e) {

    responder(
        false,
        'Erro interno ao cadastrar dispositivo.',
        array(),
        500
    );
}
