#! /bin/bash

# Set globals
LIBDIR=/usr/share/manjaro-arm-tools/lib
ARCH="aarch64"
DOCKER_IMAGE_NAME="manjaro-$ARCH-base"

#imports
source $LIBDIR/functions.sh
enable_colors

# check if root
check_root

# check if script is already running
check_running

create_rootfs () {
    # Remove old rootfs if it exists
    if [ -d $BUILDDIR/$ARCH ]; then
        echo "Removing old rootfs..."
        rm -rf $BUILDDIR/$ARCH
    fi

    # Perform basic rootfs initialization
    msg "Creating rootfs..."
    mkdir -p $BUILDDIR/$ARCH/etc
    ln -s ../usr/lib/os-release $BUILDDIR/$ARCH/etc/os-release
    $LIBDIR/pacstrap -G -c -C $LIBDIR/pacman.conf.$ARCH $BUILDDIR/$ARCH base-devel

    # Enable cross-architecture chrooting
    cp -a /usr/bin/qemu-aarch64-static $BUILDDIR/$ARCH/usr/bin
    
    # Fix SSL in the rootfs
    rm -f $BUILDDIR/$ARCH/etc/ssl/certs/ca-certificates.crt
    rm -f $BUILDDIR/$ARCH/etc/ca-certificates/extracted/tls-ca-bundle.pem
    cp -a /etc/ssl/certs/ca-certificates.crt $BUILDDIR/$ARCH/etc/ssl/certs
    cp -a /etc/ca-certificates/extracted/tls-ca-bundle.pem $BUILDDIR/$ARCH/etc/ca-certificates/extracted
    
    info "Setting up keyrings..."
    $NSPAWN $BUILDDIR/$ARCH pacman-key --init > /dev/null 2>&1
    $NSPAWN $BUILDDIR/$ARCH pacman-key --populate archlinuxarm manjaro manjaro-arm > /dev/null 2>&1
    $NSPAWN $BUILDDIR/$ARCH pacman-mirrors -f5 > /dev/null 2>&1
}

compress_docker () {
    msg "Making Docker image..."

    # Make sure that Docker service is running
    systemctl start docker

    # Create the Docker image itself
    tar --numeric-owner --xattrs --acls -C $BUILDDIR/$ARCH -c . | docker import - $DOCKER_IMAGE_NAME > /dev/null 2>&1
    docker image tag $DOCKER_IMAGE_NAME:latest manjaroarm/$DOCKER_IMAGE_NAME:latest

    # Upload the Docker image to DockerHub and remove it locally
    docker push manjaroarm/$DOCKER_IMAGE_NAME:latest
    rm -rf $BUILDDIR/$ARCH
    docker image rm $DOCKER_IMAGE_NAME
}

# Available options
opt=":a:h"

while getopts "${opt}" arg; do
  case $arg in
    a)
      ARCH="${OPTARG}"
      ;;
    \?)
      echo "Invalid option: -${OPTARG}"
      exit 1
      ;;
    h|?)
      echo "-h <help>       This help"
      exit 1
      ;;
    :)
      echo "Option -${OPTARG} requires an argument, aborting"
      exit 1
      ;;
  esac
done

# Log file
mkdir -p /var/log/manjaro-arm-tools
LOGFILE="/var/log/manjaro-arm-tools/builddockerimg-$(date +%Y-%m-%d-%H:%M).log"

# Commands
create_rootfs 2>&1 | tee --append "$LOGFILE"
compress_docker 2>&1 | tee --append "$LOGFILE"

# EOF
