--- This file defines the different triggers for the chat bot
-- @config Chat-Reply

local Async = require 'expcore.async'
local format_time = _C.format_time --- @dep expcore.common

local async_message = Async.register(function(player, message)
    player.print(message)
end)

return {
    allow_command_prefix_for_messages = true, --- @setting allow_command_prefix_for_messages when true any message trigger will print to all player when prefixed
    messages = { --- @setting messages will trigger when ever the word is said
        ['discord']={'info.discord'},
        ['expgaming']={'info.website'},
        ['website']={'info.website'},
        ['wiki']={'info.wiki'},
        ['status']={'info.status'},
        ['github']={'info.github'},
        ['patreon']={'info.patreon'},
        ['donate']={'info.patreon'},
        ['command']={'info.custom-commands'},
        ['commands']={'info.custom-commands'},
        ['softmod']={'info.softmod'},
        ['script']={'info.softmod'},
        ['loop']={'chat-bot.loops'},
        ['rhd']={'info.lhd'},
        ['lhd']={'info.lhd'},
        ['roundabout']={'chat-bot.loops'},
        ['roundabouts']={'chat-bot.loops'},
        ['redmew']={'info.redmew'},
        ['afk']=function(player)
            local max=player
            for _,next_player in pairs(game.connected_players) do
                if max.afk_time < next_player.afk_time then
                    max=next_player
                end
            end
            return {'chat-bot.afk',max.name,format_time(max.afk_time,{minutes=true,seconds=true,long=true})}
        end,
        ['players']=function()
            return {'chat-bot.players',#game.players}
        end,
        ['online']=function()
            return {'chat-bot.players-online',#game.connected_players}
        end,
        ['r!verify']=function(player)
            return {'chat-bot.verify',player.name}
        end,
    },
    command_admin_only = false, --- @setting command_admin_only when true will only allow chat commands for admins
    command_permission = 'command/chat-bot', --- @setting command_permission the permission used to allow command prefixes
    command_prefix = '!', --- @setting command_prefix prefix used for commands below and to print to all players (if enabled above)
    commands = { --- @setting commands will trigger only when command prefix is given
        ['dev']={'chat-bot.not-real-dev'},
        ['blame']=function(player)
            local names = {'Cooldude2606','arty714','badgamernl', 'mark9064', 'aldldl', 'Drahc_pro',player.name}
            for _,next_player in pairs(game.connected_players) do
                names[#names + 1] = next_player.name
            end
            return {'chat-bot.blame',table.get_random_dictionary_entry(names)}
        end,
        ['magic']={'chat-bot.magic'},
        ['aids']={'chat-bot.aids'},
        ['riot']={'chat-bot.riot'},
        ['lenny']={'chat-bot.lenny'},
        ['hodor']=function()
            local options = {'?','.','!','!!!'}
            return {'chat-bot.hodor',table.get_random_dictionary_entry(options)}
        end,
        ['evolution']=function()
            return {'chat-bot.current-evolution',string.format('%.2f',game.forces['enemy'].evolution_factor)}
        end,
        ['makepopcorn']=function(player)
            local timeout = math.floor(180*(math.random()+0.5))
            Async(async_message,player,{'chat-bot.reply',{'chat-bot.get-popcorn-1'}})
            Async.wait(timeout,async_message,player,{'chat-bot.reply',{'chat-bot.get-popcorn-2',player.name}})
        end,
        ['passsomesnaps']=function(player)
            local timeout = math.floor(180*(math.random()+0.5))
            Async(async_message,player,{'chat-bot.reply',{'chat-bot.get-snaps-1'}})
            Async.wait(timeout,async_message,player,{'chat-bot.reply',{'chat-bot.get-snaps-2',player.name}})
            Async.wait(timeout*(math.random()+0.5),async_message,player,{'chat-bot.reply',{'chat-bot.get-snaps-3',player.name}})
        end,
        ['makecocktail']=function(player)
            local timeout = math.floor(180*(math.random()+0.5))
            Async(async_message,player,{'chat-bot.reply',{'chat-bot.get-cocktail-1'}})
            Async.wait(timeout,async_message,player,{'chat-bot.reply',{'chat-bot.get-cocktail-2',player.name}})
            Async.wait(timeout*(math.random()+0.5),async_message,player,{'chat-bot.reply',{'chat-bot.get-cocktail-3',player.name}})
        end,
        ['makecoffee']=function(player)
            local timeout = math.floor(180*(math.random()+0.5))
            Async(async_message,player,{'chat-bot.reply',{'chat-bot.make-coffee-1'}})
            Async.wait(timeout,async_message,player,{'chat-bot.reply',{'chat-bot.make-coffee-2',player.name}})
        end,
        ['orderpizza']=function(player)
            local timeout = math.floor(180*(math.random()+0.5))
            Async(async_message,player,{'chat-bot.reply',{'chat-bot.order-pizza-1'}})
            Async.wait(timeout,async_message,player,{'chat-bot.reply',{'chat-bot.order-pizza-2',player.name}})
            Async.wait(timeout*(math.random()+0.5),async_message,player,{'chat-bot.reply',{'chat-bot.order-pizza-3',player.name}})
        end,
        ['maketea']=function(player)
            local timeout = math.floor(180*(math.random()+0.5))
            Async(async_message,player,{'chat-bot.reply',{'chat-bot.make-tea-1'}})
            Async.wait(timeout,async_message,player,{'chat-bot.reply',{'chat-bot.make-tea-2',player.name}})
        end,
        ['meadplease']=function(player)
            local timeout = math.floor(180*(math.random()+0.5))
            Async(async_message,player,{'chat-bot.reply',{'chat-bot.get-mead-1'}})
            Async.wait(timeout,async_message,player,{'chat-bot.reply',{'chat-bot.get-mead-2',player.name}})
        end,
        ['passabeer']=function(player)
            local timeout = math.floor(180*(math.random()+0.5))
            Async(async_message,player,{'chat-bot.reply',{'chat-bot.get-beer-1'}})
            Async.wait(timeout,async_message,player,{'chat-bot.reply',{'chat-bot.get-beer-2',player.name}})
        end
    }
}
