import subprocess
import netifaces


class ChangeIP:
    def __init__(self, connection_type, ip, netmask, gateway, hostname):

        adapter = self.find_adapter()
        if adapter is not None:
            self.shutdown_adapter(adapter)

            if connection_type == "DHCP":
                self.change_to_dhcp(adapter=adapter)

            elif connection_type == "Static":
                self.change_to_static(adapter=adapter, ip=ip, netmask=netmask, gateway=gateway)

            self.start_adapter(adapter)
        else:
            print("not connected to robot radio cannot set ip")
        self.change_hostname(hostname=hostname)

    @staticmethod
    def change_to_dhcp(adapter):
        subprocess.call(['dhclient',"-r", adapter])

    @staticmethod
    def change_to_static(adapter, ip, netmask, gateway):
        subprocess.call(['ifconfig', adapter, ip, 'netmask', netmask])
        subprocess.call(['route', 'add', 'default', 'gw', gateway, adapter])

    @staticmethod
    def shutdown_adapter(adapter):
        subprocess.call(['ifconfig', adapter, 'down'])
    @staticmethod
    def start_adapter(adapter):
        subprocess.call(['ifconfig', adapter, 'up'])

    @staticmethod
    def find_adapter():
        for i_name in netifaces.interfaces():
            interface = netifaces.ifaddresses(i_name)[netifaces.AF_INET][0]
            address = interface['addr'].split('.')[0]
            if address == "10":
                return str(i_name)

    @staticmethod
    def change_hostname(hostname):
        subprocess.call(['hostnamectl', 'set-hostname', hostname])
