# -*- coding: utf-8 -*-

# Copyright 2008-2016 Mir Calculate. http://www.calculate-linux.org
#
#  Licensed under the Apache License, Version 2.0 (the "License");
#  you may not use this file except in compliance with the License.
#  You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
#  limitations under the License.

import sys
from calculate.lib.datavars import ReadonlyVariable, VariableInterface
from calculate.lib.variables.linux import Linux

from calculate.lib.cl_lang import setLocalTranslate

setLocalTranslate('cl_install3', sys.modules[__name__])


class InstallLinux(Linux, VariableInterface):
    def __getFromImageOrCurrent(self, currentVar):
        """Get value from install image or current system"""
        if self.Get('cl_action') == 'system':
            image = self.Get('cl_image')
            if image:
                d = image.getInfo()
                # support lazy values
                res = d.get(currentVar, "")
                return str(res()) if callable(res) else res
            else:
                return ""
        else:
            return self.Get(currentVar)

    # variable for get current system info (example: os_linux_shortname)
    current_variable = ""
    # field of distroinfo (name,ver,build,march and etc)
    distroinfo_field = ""

    def get(self):
        """Get by distroinfo or current info"""
        return self.__getFromImageOrCurrent(self.current_variable)


class VariableOsInstallLinuxShortname(InstallLinux, ReadonlyVariable):
    """Shortname of system"""
    current_variable = "os_linux_shortname"


class VariableOsInstallLinuxVer(InstallLinux, ReadonlyVariable):
    """Version of system"""
    current_variable = "os_linux_ver"


class VariableOsInstallLinuxBuild(InstallLinux, ReadonlyVariable):
    """Build of system"""
    current_variable = "os_linux_build"


class VariableOsInstallArchMachine(InstallLinux, ReadonlyVariable):
    """Arch of system"""
    current_variable = "os_arch_machine"


class VariableOsInstallLinuxFiles(InstallLinux, ReadonlyVariable):
    """Files num in system"""
    current_variable = "os_linux_files"


class VariableOsInstallLinuxName(InstallLinux, ReadonlyVariable):
    """
    Install distro name
    """
    current_variable = "os_linux_name"


class VariableOsInstallLinuxSystem(InstallLinux, ReadonlyVariable):
    """
    Install system name
    """
    current_variable = "os_linux_system"


class VariableOsInstallLinuxSubname(InstallLinux, ReadonlyVariable):
    """
    Install subname
    """
    current_variable = "os_linux_subname"
