from pyspades.server import weapon_reload
from commands import add, admin

@admin
def reload(connection,ammo=255,clip=255,grenades=255):
    connection.set_ammo(int(ammo),int(clip),int(grenades))
    return "reloaded"

@admin
def ammo(connection):
    ammo=connection.ammo
    return "You have "+str(ammo[0])+" ammo and a clip of "+str(ammo[1])+"."

@admin
def autoreload(connection):
    connection.autoReload= not connection.autoReload
    return "Auto reloading is "+["OFF","ON"][connection.autoReload]
   
add(reload)
add(ammo)
add(autoreload)
def apply_script(protocol, connection, config):
    
    class ammoConnection(connection):
        ammo=(0,0)
        autoReload=False
        
        def refresh_ammo(self):
            self.ammo=(self.weapon_object.current_ammo,self.weapon_object.current_stock)
        
        def on_spawn(self,pos):
            self.refresh_ammo()
            connection.on_spawn(self, pos)
    
        def on_shoot_set(self, fire):
            if self.autoReload:
                self.set_ammo(255,255)
            self.refresh_ammo()
            connection.on_shoot_set(self, fire)

        def on_refill(self):
            self.refresh_ammo()
            connection.on_refill(self)

        def on_input_update(self):
            self.refresh_ammo()
            connection.on_input_update(self)
        def set_ammo(self, new_ammo, new_stock=None):
            if new_ammo>255:
                new_ammo=255
            if new_stock>255:
                new_stock=255
            weapon=self.weapon_object
            weapon.set_shoot(False)
            weapon_reload.player_id = self.player_id
            weapon_reload.clip_ammo = weapon.current_ammo
            weapon.current_ammo = new_ammo
            if new_stock:
                weapon.current_stock = new_stock
            weapon_reload.reserve_ammo = weapon.current_stock
            self.send_contained(weapon_reload)
            self.ammo=(new_ammo,new_stock)
    
    return  protocol, ammoConnection
