local items = require 'config'

if settings.startup['PHI-XC'].value then
    local function clock_display(sec)
        local s = math.floor(sec) % 60
        local m = math.floor(sec / 60) % 60

        if sec > 3599 then
            local h = math.floor(sec / 3600)
            return string.format('%d:%02d:%02d', h, m, s)

        else
            return string.format('%d:%02d', m, s)
        end
    end

    script.on_nth_tick(60, function(event)
        for _, player in pairs(game.connected_players) do
            if player.gui.top.phi_clock == nil then
                player.gui.top.add{type='button', name='phi_clock'}
            end

            player.gui.top.phi_clock.caption = clock_display(math.floor(event.tick / 60))
        end
    end)
end

if settings.startup['PHI-PB'].value then
    commands.add_command('phi-pb-bonus', nil, function(command)
        if not command.player_index then
            game.print('Command Error - PHI-PB-BONUS')
            return
        end

        local player = game.get_player(command.player_index)
        local bonus = tonumber(command.parameter)

        if not player then
            return
        end

        if type(bonus) ~= 'number' then
            player.print('Parameter need to be number')
            return
        end

        if (bonus < 0) or (bonus > 10) then
            player.print('Parameter need to be in range of 0 - 10')
            return
        end

        for k, v in pairs(items['bonus']['player_bonus']) do
            game.players[command.player_index][k] = bonus / 10 * v.value

            if v.combined_bonus then
                for i=1, #v.combined_bonus, 1 do
                    game.players[command.player_index][v.combined_bonus[i]] = bonus / 10 * v.value
                end
            end
        end
    end)

    script.on_event(defines.events.on_player_died, function(event)
        game.players[event.player_index].ticks_to_respawn = 120
    end)
end

if settings.startup['PHI-CT'].value and settings.startup['PHI-CT-TRASH'].value then
    local function trash_creation(event)
        local entity = event.created_entity or event.entity

        if not entity then
            return
        end

        if not entity.valid then
            return
        end

        if entity.name == 'trash-chest' then
            entity.infinity_container_filters = {}
            entity.remove_unfiltered_items = true

        elseif entity.name == 'trash-pipe' then
            entity.set_infinity_pipe_filter(nil)
        end
    end

    local function trash_check()
        for _, surface in pairs(game.surfaces) do
            for _, e in pairs(surface.find_entities_filtered{name='trash-chest'}) do
                e.infinity_container_filters = {}
                e.remove_unfiltered_items = true
            end

            for _, e in pairs(surface.find_entities_filtered{name='trash-pipe'}) do
                e.set_infinity_pipe_filter(nil)
            end
        end
    end

    script.on_init(trash_check)
    script.on_event(defines.events.on_built_entity, trash_creation, {{filter='name', name='trash-chest', mode='or'}, {filter='name', name='trash-pipe', mode='or'}})
    script.on_event(defines.events.on_robot_built_entity, trash_creation, {{filter='name', name='trash-chest', mode='or'}, {filter='name', name='trash-pipe', mode='or'}})
    script.on_event(defines.events.script_raised_built, trash_creation)
    script.on_event(defines.events.script_raised_revive, trash_creation)
end
