/*Canopy - The next generation of stoner streaming software
Copyright (C) 2024-2025 Rainbownapkin and the TTN Community

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License
along with this program.  If not, see <https://www.gnu.org/licenses/>.*/

//Local Imports
const {userModel} = require('../schemas/user/userSchema');
const csrfUtils = require('../utils/csrfUtils');
const presenceUtils = require('../utils/presenceUtils');
const {exceptionHandler, errorHandler} = require('../utils/loggerUtils');

//Config
const config = require('../../config.json');


//profile functions
module.exports.get = async function(req, res){
    try{
        var profileName = req.url.slice(1) == '' ? (req.session.user ? req.session.user.user : null) : req.url.slice(1);

        const profile = await userModel.findProfile({user: profileName}, true);

        if(profile){
            //If we have a user, check if the is looking at their own profile
            const selfProfile = req.session.user ? profile.user == req.session.user.user : false;

            //Pull presence (should be quick since everyone whos been on since last startup will be backed in RAM)
            const presence = await presenceUtils.getPresence(profile.user);

            res.render('profile', {
                instance: config.instanceName,
                user: req.session.user,
                profile,
                selfProfile,
                presence,
                csrfToken: csrfUtils.generateToken(req)
            });
        }else{
            res.render('profile', {
                instance: config.instanceName,
                user: req.session.user,
                profile: null,
                selfProfile: false,
                presence: null,
                csrfToken: csrfUtils.generateToken(req)
            });
        }
    }catch(err){
        return exceptionHandler(res, err);
    }
}