from bootstrapvz.base import Task
from .. import phases
import os


class RemoveDNSInfo(Task):
    description = 'Removing resolv.conf'
    phase = phases.system_cleaning

    @classmethod
    def run(cls, info):
        if os.path.isfile(os.path.join(info.root, 'etc/resolv.conf')):
            os.remove(os.path.join(info.root, 'etc/resolv.conf'))


class RemoveHostname(Task):
    description = 'Removing the hostname file'
    phase = phases.system_cleaning

    @classmethod
    def run(cls, info):
        if os.path.isfile(os.path.join(info.root, 'etc/hostname')):
            os.remove(os.path.join(info.root, 'etc/hostname'))


class SetHostname(Task):
    description = 'Writing hostname into the hostname file'
    phase = phases.system_modification

    @classmethod
    def run(cls, info):
        hostname = info.manifest.system['hostname'].format(**info.manifest_vars)
        hostname_file_path = os.path.join(info.root, 'etc/hostname')
        with open(hostname_file_path, 'w') as hostname_file:
            hostname_file.write(hostname)

        hosts_path = os.path.join(info.root, 'etc/hosts')
        from bootstrapvz.common.tools import sed_i
        sed_i(hosts_path, '^127.0.0.1\tlocalhost$', '127.0.0.1\tlocalhost\n127.0.1.1\t' + hostname)


class ConfigureNetworkIF(Task):
    description = 'Configuring network interfaces'
    phase = phases.system_modification

    @classmethod
    def run(cls, info):
        from ..tools import config_get, rel_path
        network_config_path = rel_path(__file__, 'network-configuration.yml')
        if_config = config_get(network_config_path, [info.manifest.release.codename])

        interfaces_path = os.path.join(info.root, 'etc/network/interfaces')
        with open(interfaces_path, 'a') as interfaces:
            interfaces.write(if_config + '\n')
