#!/sbin/sh

OUTFD=/proc/self/fd/$2
ZIPFILE="$3"

ui_print() {
  echo -e "ui_print $1\nui_print" >>$OUTFD
}

package_extract_file() {
  ui_print " - Flasing $(echo $1 | awk -F "/" '{print $NF}') to $(echo $2 | awk -F "/" '{print $NF}') partition"
  unzip -p "$ZIPFILE" $1 >$2
}

package_extract_zstd() {
  ui_print " - Flashing $(echo $1 | awk -F "/" '{print $NF}') to $(echo $2 | awk -F "/" '{print $NF}') partition"
  unzip -p "$ZIPFILE" $1 | $bin/zstd -c -d >$2
}


bin=/tmp/bin/android
if [ -d $bin ]; then
  rm -rf $bin
fi
mkdir -p $bin
unzip "$ZIPFILE" bin/android/* -d /tmp
chmod -R 0777 $bin
ui_print " "
ui_print "***********************************" 
ui_print "            OS2.0.6.0.VKFCNXM         " 
ui_print "            Redmi Note 10 Pro         "
ui_print "          Security Patch 24.05.01      "
ui_print " "
ui_print " "
ui_print " _    _                        ____   _____  "
ui_print "| |  | |                      / __ \ / ____| "
ui_print "| |__| |_   _ _ __   ___ _ __| |  | | (___   "
ui_print "|  __  | | | | '_ \ / _ \ '__| |  | |\___ \  "
ui_print "| |  | | |_| | |_) |  __/ |  | |__| |____) | "
ui_print "|_|  |_|\__, | .__/ \___|_|   \____/|_____/  "
ui_print "         __/ | |                             "
ui_print "        |___/|_|          @CharlieOS Updates "
ui_print "                     Build by Dulquer Salmaan  "
ui_print " "

ui_print "! FLASHING STARTED !"
ui_print " "
ui_print "Installation busybox..."
package_extract_file "META-INF/com/mod/busybox", "/tmp/busybox"
run_program "/system/bin/chmod", "777", "/tmp/busybox" 

ui_print "Mounting partitions..."
run_program "/tmp/busybox", "mount", "/cache"
run_program "/tmp/busybox", "mount", "/cust"

ui_print "Wiping partitions..."
run_program "/tmp/busybox", "rm", "-rf", "/cust"
run_program "/tmp/busybox", "rm", "-rf", "/data/dalvik-cache"
ui_print "Installing boot..."
package_extract_file "images/boot.img" "/dev/block/bootdevice/by-name/boot"
ui_print " "
ui_print "Done... "
ui_print " "
ui_print "! UPDATING FIRMWARE !"
ui_print " "
package_extract_file "images/dtbo.img" "/dev/block/bootdevice/by-name/dtbo"
package_extract_file "images/vbmeta.img" "/dev/block/bootdevice/by-name/vbmeta"
package_extract_file "images/vbmeta_system.img" "/dev/block/bootdevice/by-name/vbmeta_system"
package_extract_file "images/cmnlib64.mbn", "/dev/block/bootdevice/by-name/cmnlib64"
package_extract_file "images/NON-HLOS.bin", "/dev/block/bootdevice/by-name/modem"
package_extract_file "images/cmnlib.mbn", "/dev/block/bootdevice/by-name/cmnlib"
package_extract_file "images/hyp.mbn", "/dev/block/bootdevice/by-name/hyp"
package_extract_file "images/BTFM.bin", "/dev/block/bootdevice/by-name/bluetooth"
package_extract_file "images/tz.mbn", "/dev/block/bootdevice/by-name/tz"
package_extract_file "images/aop.mbn", "/dev/block/bootdevice/by-name/aop"
package_extract_file "images/xbl_config.elf", "/dev/block/bootdevice/by-name/xbl_config"
package_extract_file "images/storsec.mbn", "/dev/block/bootdevice/by-name/storsec"
package_extract_file "images/uefi_sec.mbn", "/dev/block/bootdevice/by-name/uefisecapp"
package_extract_file "images/imagefv.elf", "/dev/block/bootdevice/by-name/imagefv"
package_extract_file "images/qupv3fw.elf", "/dev/block/bootdevice/by-name/qupfw"
package_extract_file "images/abl.elf", "/dev/block/bootdevice/by-name/abl"
package_extract_file "images/dspso.bin", "/dev/block/bootdevice/by-name/dsp"
package_extract_file "images/devcfg.mbn", "/dev/block/bootdevice/by-name/devcfg"
package_extract_file "images/km41.mbn", "/dev/block/bootdevice/by-name/keymaster"
package_extract_file "images/xbl.elf", "/dev/block/bootdevice/by-name/xbl"
package_extract_file "images/cmnlib64.mbn", "/dev/block/bootdevice/by-name/cmnlib64bak"
package_extract_file "images/cmnlib.mbn", "/dev/block/bootdevice/by-name/cmnlibbak"
package_extract_file "images/hyp.mbn", "/dev/block/bootdevice/by-name/hypbak"
package_extract_file "images/tz.mbn", "/dev/block/bootdevice/by-name/tzbak"
package_extract_file "images/aop.mbn", "/dev/block/bootdevice/by-name/aopbak"
package_extract_file "images/xbl_config.elf", "/dev/block/bootdevice/by-name/xbl_configbak"
package_extract_file "images/uefi_sec.mbn", "/dev/block/bootdevice/by-name/uefisecappbak"
package_extract_file "images/imagefv.elf", "/dev/block/bootdevice/by-name/imagefvbak"
package_extract_file "images/qupv3fw.elf", "/dev/block/bootdevice/by-name/qupfwbak"
package_extract_file "images/abl.elf", "/dev/block/bootdevice/by-name/ablbak"
package_extract_file "images/devcfg.mbn", "/dev/block/bootdevice/by-name/devcfgbak"
package_extract_file "images/km41.mbn", "/dev/block/bootdevice/by-name/keymasterbak"
package_extract_file "images/xbl.elf", "/dev/block/bootdevice/by-name/xblbak"

# flash firmware done
run_program "/sbin/sh", "-c", "rm -rf /data/system/package_cache"
run_program "/sbin/sh", "-c", "rm -rf /data/data/com.miui.yellowpage"
run_program "/sbin/sh", "-c", "rm -rf /data/data/com.miui.aod"
run_program "/sbin/sh", "-c", "rm -rf /data/data/com.google.android.gms/app_dg_cache"
ui_print " "
ui_print "Done... "
ui_print " "
ui_print " ! FLASHING SUPER.IMG !"
ui_print " "
package_extract_zstd "images/super.img.zst" "/dev/block/bootdevice/by-name/super"
ui_print " "
ui_print "Cleaning..."
run_program "/tmp/busybox", "rm", "-rf", "/tmp/busybox"
run_program "/tmp/busybox", "rm", "-rf", "/tmp/miuiIX_root"
ui_print " "
ui_print " "
ui_print " ! FLASHING COMPLETED ! "
ui_print " ! NOW FORMAT DATA & REBOOT SYSTEM ! "
ui_print " "

exit 0
