import os
import pathlib

from slave import base_recipe
from slave.step import shell_step


def GetValidBuildNames():
  return [
      'abbey_container',
      'container_building_container',
      'gotham_container',
      'monotainer',
      'recipe_bullseye',
  ]


def CreateRecipe(build_name: str, **kwargs):
  del build_name
  return ContainerBuilderRecipe(**kwargs)


class ContainerBuilderRecipe(base_recipe.BaseRecipe):
  """Recipe to build and optionally push a container image."""

  def get_steps(self):
    steps = [ContainerBuildStep(
        directory=str(self._eureka_root),
        halt_on_failure=True,
        **self._step_kwargs)]
    if 'container_push_url' in self._properties:
      steps += [ContainerPushStep(halt_on_failure=True, **self._step_kwargs)]
    return steps


class ContainerBuildStep(shell_step.ShellStep):

  def __init__(self,  **kwargs):
    super().__init__(name='container build', **kwargs)
    self._git_config_path = pathlib.Path.home() / 'containers' / 'gitconfig'
    self._pip_config_path = pathlib.Path.home() / 'containers' / 'pip.conf'
    self._gcs_mirror_path = pathlib.Path.home() / 'gcs-mirror'
    self._git_creds_path = pathlib.Path.home() / '.git-credential-cache'

  def get_commands(self):
    build_id = self.get_property('basil_build_id')
    creds_path = self._git_creds_path
    return [
        self.ShellCommand([
            'podman',
            'build',
            '--format=oci',
            '--arch=amd64',
            f'--tag={build_id}',
            '--no-cache',
            '--isolation=chroot',
            f'--label=build_id={build_id}',
            '--volume=/etc/gitconfig:/etc/gitconfig:ro',
            '--volume=/etc/pip.conf:/etc/pip.conf:ro',
            '--volume=/workspace/gcs-mirror:/workspace/gcs-mirror:ro',
            ('--volume=/workspace/git-credential-cache:'
              '/workspace/git-credential-cache:ro'),
            self.get_property('container_context_path'),
        ]),
    ]


class ContainerPushStep(shell_step.ShellStep):

  def __init__(self,  **kwargs):
    super().__init__(name='container push', **kwargs)

  def get_commands(self):
    build_id = self.get_property('basil_build_id')
    push_url = self.get_property('container_push_url')
    image_tag = self.get_property('buildset')
    builder_name = self.get_property('buildername')
    return [
        self.ShellCommand([
            'podman',
            'push',
            f'localhost/{build_id}:latest',
            f'{push_url}/{builder_name}:{image_tag}',
        ], num_retries=3),
    ]
