#!/sbin/sh

######
# INIT
######

umask 0022

# Global vars
TMPDIR="/dev/tmp"
PERSISTDIR="/sbin/.magisk/mirror/persist"

rm -rf "$TMPDIR" 2>/dev/null
mkdir -p "$TMPDIR"

# Echo before loading util_functions
ui_print(){ 
echo "$1"
}

load_vksel(){
. "$MODPATH/addon/Volume-Key-Selector/install.sh"
}

####################
# SETUP ENVIRONMENT
####################

OUTFD=$2
ZIPFILE=$3

mount /data 2>/dev/null

# Load utility functions
. "/data/adb/magisk/util_functions.sh"

# Preperation for flashable zips
setup_flashable

# Mount partitions
mount_partitions

# Detect version and architecture
api_level_arch_detect

# Setup busybox and binaries
$BOOTMODE && boot_actions || recovery_actions

##############
# PREPARATION
##############

# Extract prop file
unzip -o "$ZIPFILE" module.prop -d $TMPDIR >&2
[ ! -f "$TMPDIR/module.prop" ] && abort "[!] Unable to extract zip file!"

# Mod vars
NVBASE="/data/adb"
$BOOTMODE && MODDIRNAME=modules_update || MODDIRNAME=modules
MODULEROOT="$NVBASE/$MODDIRNAME"
MODID="$(grep_prop id $TMPDIR/module.prop)"
MODPATH="$MODULEROOT/$MODID"
MODNAME="$(grep_prop name $TMPDIR/module.prop)"

# Create mod paths
rm -rf "$MODPATH" 2>/dev/null
mkdir -p "$MODPATH"

##############
# INSTALLATION
##############

# Extract to $MODPATH
unzip -o "$ZIPFILE" -d "$MODPATH" >&2

# Load install script
. "$MODPATH/setup.sh"

# Remove all old files before doing installation if want to
if [ "$CLEANSERVICE" = "true" ]; then
rm -rf /data/adb/modules/${MODID}/*
fi

# Enable debugging if true
if [ "$DEBUG" = "true" ]; then
set -x
else
set +x
fi

# Print mod info
info_print

# Auto vskel load
if [ "$AUTOVKSEL" = "true" ]; then
load_vksel
fi

# Main
init_main

# Skip mount
if [ "$SKIPMOUNT" = "true" ]; then
touch "$MODPATH/skip_mount"
fi

# Set permissions
set_permissions

# Do cleanup
do_cleanup

# Handle replace folders
for TARGET in $REPLACE; do
ui_print "▌ Replace target: $TARGET"
mktouch "$MODPATH$TARGET/.replace"
done

if $BOOTMODE; then
# Update info for Magisk app
mktouch $NVBASE/modules/$MODID/update
cp -af "$MODPATH/module.prop" "$NVBASE/modules/$MODID/module.prop"
fi

# Copy over custom sepolicy rules
if [ -f "$MODPATH/sepolicy.rule" ]; then
ui_print "▌ Installing custom sepolicy rules"
copy_sepolicy_rules
fi

# Remove stuffs that don't belong to modules
rm -rf "$MODPATH/META-INF"
rm -rf "$MODPATH/addon"
rm -rf "$MODPATH/setup.sh"
rm -rf "$MODPATH/system/placeholder"

##############
# Finalizing
##############

cd /
if ! $BOOTMODE; then
recovery_cleanup
fi
rm -rf "$TMPDIR"

ui_print "▌ Done"
exit 0