/*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/>.*/

//NPM Imports
const { checkSchema, checkExact } = require('express-validator');

//local imports
const accountValidator = require('./accountValidator');

module.exports = {

    settingsMap: () => checkExact(checkSchema({
        'settingsMap.hidden': {
                optional: true,
                isBoolean: true,
        } }))
}

module.exports.name = function(field = 'name'){
    return checkSchema({
        [field]: {
            escape: true,
            isAlphanumeric: {
                errorMessage: "Channel names must be alphanumeric."
            },
            isLength: {
                options: {
                    min: 1,
                    max: 50
                },
                errorMessage: "Channel names must be between 1 and 50 characters."
            },
            trim: true
        }
    });
}

module.exports.description = function(field = 'description'){
    return checkSchema({
        [field]:{
            escape: true,
            trim: true,
            isLength: {
                options: {
                    min: 1,
                    max: 1000
                },
                errorMessage: "Description must be between 1 and 1000 characters."
            },
        }
    });
}

module.exports.thumbnail = function(field = 'thumbnail'){
    return accountValidator.img(field);
}


module.exports.rank = function(field = 'rank'){
    return accountValidator.rank(field);
}

module.exports.settingsMap = function(){
    return checkExact(
        checkSchema({
            'settingsMap.hidden': {
                    optional: true,
                    isBoolean: true,
                    errorMessage: "Bad channel settings map."
            },
            'settingsMap.streamURL': {
                optional: true,
                isURL: {
                    options:{
                        require_valid_protocol: true
                    }
                },
                errorMessage: "Invalid Stream URL"
            }
        })
    );
}