from pythonforandroid.recipe import Recipe
from pythonforandroid.toolchain import shprint
from os.path import join
import sh


class Hostpython3Recipe(Recipe):
    version = 'auto'  # the version is taken from the python3crystax recipe
    name = 'hostpython3crystax'

    conflicts = ['hostpython2']

    def get_build_container_dir(self, arch=None):
        choices = self.check_recipe_choices()
        dir_name = '-'.join([self.name] + choices)
        return join(self.ctx.build_dir, 'other_builds', dir_name, 'desktop')

    # def prebuild_armeabi(self):
    #     # Override hostpython Setup?
    #     shprint(sh.cp, join(self.get_recipe_dir(), 'Setup'),
    #             join(self.get_build_dir('armeabi'), 'Modules', 'Setup'))

    def get_build_dir(self, arch=None):
        return join(self.get_build_container_dir(), self.name)

    def build_arch(self, arch):
        """
        Creates expected build and symlinks system Python version.
        """
        self.ctx.hostpython = '/usr/bin/false'
        self.ctx.hostpgen = '/usr/bin/false'
        # creates the sub buildir (used by other recipes)
        # https://github.com/kivy/python-for-android/issues/1154
        sub_build_dir = join(self.get_build_dir(), 'build')
        shprint(sh.mkdir, '-p', sub_build_dir)
        python3crystax = self.get_recipe('python3crystax', self.ctx)
        system_python = sh.which("python" + python3crystax.version)
        if system_python is None:
            raise OSError(
                ('Trying to use python3crystax=={} but this Python version '
                 'is not installed locally.').format(python3crystax.version))
        link_dest = join(self.get_build_dir(), 'hostpython')
        shprint(sh.ln, '-sf', system_python, link_dest)


recipe = Hostpython3Recipe()