const userRepo = require('../database/UserRepository');
const validator = require('validator');

async function UpdateUserName(req, res) {
    try {    
        if (!req.session.isLogged) {
            console.error('ERROR: Użytkownik nie jest zalogowany by zmienić nazwe')
            return res.status(401).json({
                success: false,
                mess: 'Nie jesteś zalogowany!'
            });
        }

        const name = req.body.name;
        const userId = req.session.user_id;
        const userName = req.session.user_name;

        console.log(name);

        if (name == userName) {
            console.error('ERROR: Nazwa użytkownika jest taka sama co poprzednia');
            return res.status(400).json({
                success: false,
                mess: 'Nazwa użytkownika jest taka sama co poprzednia'
            });
        }

        if (!ValidGlyphs(name)) {
            console.error('ERROR: Nazwa użytkownika może składać się tylko z cyfr, dużych i małych liter');
            return res.status(400).json({
                success: false,
                mess: 'Nazwa użytkownika może składać się tylko z cyfr, dużych i małych liter bez znaków specjalnych'
            });
        }

        if (!UserNameLength(name)) {
            console.error('ERROR: Nazwa użytkownika jest za krutka');
            return res.status(400).json({
                success: false,
                mess: 'Nazwa użytkownika jest za krutka'
            });
        }

        //Aktualizacja nazwy w bazie danych
        if (await userRepo.UpdateName(userId, name) < 1) {
            console.error('ERROR: Nie udało się zaktualizować nazwy użytkownika');
            return res.status(400).json({
                success: false,
                mess: 'Nie udało się zaktualizować nazwy użytkownika'
            });
        }

        req.session.user_name = name; //Aktualizacja nazwy w sessji

        res.status(200).json({
            success: true,
            username: req.session.user_name,
            mess: 'Nazwa użytkownika została zmieniona pomyślnie'
        });
    }
    catch(e) {
        console.error(`ERROR: Nie udało się zaktualizować nazwy użytkownika: ${e}`);
        res.status(500).json({
            success: false,
            mess: 'Nie udało się zaktualizować nazwy użytkownika'
        });
    }
}

//Sprawdza czy długość nazy jest poprawna
function UserNameLength(name) {
    const len = name.length;

    if(len < 56 && len > 3) {
        return true;
    }

    return false;
}

//Sprawdzenie czy nazwa składa się tylko z liter i cyfr
function ValidGlyphs(name) {
    const pattern = /^[a-zA-Z][a-zA-Z0-9_]{2,15}$/;
    return pattern.test(name);
}

module.exports = UpdateUserName;