const fs = require('fs');
const path = require('path');
const AvatarImage = require('../image/AvatarImage');
const imm = require('../image');
const userRepo = require('../database/UserRepository');

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

        //console.log(req.files.file);
    
        if (!req.files || !req.files.file) {
            return res.status(400).json({ 
                success: false,
                mess: 'Nie udało się załadować pliku'
             });
        }

        const userHash = req.session.user_hash;
        const userId = req.session.user_id;
        const uploadPath = path.join(__dirname, `../../upload/${userHash}/raw`);
        fs.mkdirSync(uploadPath, { recursive: true });
        await clearDirectory(uploadPath);
        const uploadedFile = req.files.file;
        const fileExtension = path.extname(uploadedFile.name);
        const newFileName = `raw-uploaded-image${Date.now()}${fileExtension}`;
        const filePath = path.join(uploadPath, newFileName);
        await uploadedFile.mv(filePath);

        const fileAvatar = await AvatarImage(filePath, userHash);

        /*
            Tutaj ma być blok kodu który przetworzy obrazek
            na blob i zapisze go w bazie danych 
        */

        if(!fileAvatar) {
            console.error('ERROR: Brak wewnętrznej ścieżki do przetworzonego pliku avatara');
            return res.state(400).json({
                success: false,
                mess: 'Nie udało się przetworzyć pliku'
            });
        }

        const blob = await imm.LoadImgToBlob(fileAvatar);

        console.log("AVATAR DONE!")

        if(await userRepo.UpdateAvatar(userId, blob) < 1) {
            console.error('ERROR: Nie udało się wgrać avatara do bazy danych');
            return res.status(400).json({
                success: false,
                mess: 'Nie udało się zaktualizować avatara'
            });
        }

        res.status(200).json({
            success: true,
            mess: 'Pomyślnie zaktualizowano avatar',
            avatar: blob.toString('base64')
        });
    }
    catch(e) {
        console.error(`ERROR: Nie udało się zaktualizować avatara: ${e}`);
        res.status(500).json({
            success: false,
            mess: 'Nie udało się zaktualizować avatara'
        });
    }
}

async function clearDirectory(directoryPath) {
    try {
        // Pobierz listę plików i folderów w katalogu
        const files = fs.readdirSync(directoryPath);

        // Usuń każdy plik lub folder
        for (const file of files) {
            const fullPath = path.join(directoryPath, file);
            fs.unlinkSync(fullPath);
        }

        console.log(`Zawartość katalogu ${directoryPath} została usunięta.`);
    } catch (error) {
        if (error.code === 'ENOENT') {
            console.log(`Katalog ${directoryPath} nie istnieje.`);
        } else {
            console.error(`Błąd podczas usuwania zawartości katalogu: ${error.message}`);
        }
    }
}

module.exports = UpdateUserAvatar;