#!/bin/bash

function build_deb() {
    if [ ! -d ~/Project ]; then
        echo -e "Project folder not found. Move your source folder to ~/Project/(ostype) folder\nor type <build-deb source> to create default package"
        exit
    else
        read -p "OS Type: " linuxtype;
        files=$(ls -1 $HOME/Project/$linuxtype)
        select choice in ${files[@]}; do
            break
        done
        echo "${choice}"
        if [ ! -d "$HOME/Project/${linuxtype}/${choice}/DEBIAN" ]; then
            echo "Lets start to make your own project"
            echo "Run: build-deb source"
        else
            read -p "Will be put in the components folder: " compfold;
            debfold="$HOME/Project/${linuxtype}-deb"
            chmod 755 $HOME/Project/${linuxtype}/${choice}/DEBIAN -R
            dpkg-deb --build -Zxz "$HOME/Project/${linuxtype}/${choice}"
            mv $HOME/Project/${linuxtype}/${choice}.deb ${debfold}/${compfold}/
        fi
    fi
}

function build_source() {
    TERMUXSHEBANG="#!/data/data/com.termux/files/usr/bin/bash"
    DEBIANSHEBANG="#!/bin/bash"
    if [ -d ~/Project ]; then
        read -p "OS Type: " linuxtype;
        read -p "Package Name: " pkgname;
        read -p "Version: " versiondeb;
        read -p "Architecture: " archtype;
        read -p "Depends: " depend;
        read -p "Recommends: " recommend;
        read -p "Installed Size: " installsize;
        read -p "Descriptions: " description;
        read -p "Username: " username;
        read -p "Email: " useremail;
        read -p "Home Page: " homepage;
        if [ ! -d $HOME/Project/${linuxtype}/${pkgname}_${versiondeb}_${archtype}/DEBIAN ]; then
            mkdir -p $HOME/Project/${linuxtype}/${pkgname}_${versiondeb}_${archtype}/DEBIAN
        else
            chmod 755 $HOME/Project/${linuxtype}/${pkgname}_${versiondeb}_${archtype}/DEBIAN -R
            echo -e "Run: nano ~/Project/${linuxtype}/${pkgname}_${versiondeb}_${archtype}/usr/local/bin/(your binary)\nOr move your binary this folder"
            exit
        fi
        if [ "$linuxtype" == "termux" ]; then
            mkdir -p $HOME/Project/${linuxtype}/${pkgname}_${versiondeb}_${archtype}/data/data/com.termux/files/usr/bin
            echo "${TERMUXSHEBANG}" > $HOME/Project/${linuxtype}/${pkgname}_${versiondeb}_${archtype}/DEBIAN/postinst
            echo "${TERMUXSHEBANG}" > $HOME/Project/${linuxtype}/${pkgname}_${versiondeb}_${archtype}/DEBIAN/prerm
            echo -e "Package: ${pkgname}\nVersion: ${versiondeb}\nArchitecture: ${archtype}\nMaintainer: ${username} <${useremail}>\nDepends: ${depend}\nRecommends: ${recommend}\nInstalled-Size: ${installsize}\nHomepage: ${homepage}\nDescription: ${description}" > ~/Project/${linuxtype}/${pkgname}_${versiondeb}_${archtype}/DEBIAN/control
        else
            mkdir -p $HOME/Project/${linuxtype}/${pkgname}_${versiondeb}_${archtype}/usr/local/bin
            echo "${DEBIANSHEBANG}" > $HOME/Project/${linuxtype}/${pkgname}_${versiondeb}_${archtype}/DEBIAN/postinst
            echo "${DEBIANSHEBANG}" > $HOME/Project/${linuxtype}/${pkgname}_${versiondeb}_${archtype}/DEBIAN/prerm
            echo -e "Package: ${pkgname}\nVersion: ${versiondeb}\nArchitecture: ${archtype}\nMaintainer: ${username} <${useremail}>\nDepends: ${depend}\nRecommends: ${recommend}\nInstalled-Size: ${installsize}\nHomepage: ${homepage}\nDescription: ${description}" > ~/Project/${linuxtype}/${pkgname}_${versiondeb}_${archtype}/DEBIAN/control
        fi
        chmod 755 $HOME/Project/${linuxtype}/${pkgname}_${versiondeb}_${archtype}/DEBIAN -R
        echo -e "Run: cd ~/Project/${linuxtype}/${pkgname}_${versiondeb}_${archtype}. then move binary to this folder"
    else
        exit
    fi
}

function update_source() {
    read -p "OS Type: " linuxtype;
    files=$(ls -1 $HOME/Project/$linuxtype)
    select choice in ${files[@]}; do
        break
    done
    cat $HOME/Project/${linuxtype}/$choice/DEBIAN/control | grep Package > $PREFIX/tmp/edited-deb.log
    cat $HOME/Project/${linuxtype}/$choice/DEBIAN/control | grep Version >> $PREFIX/tmp/edited-deb.log
    cat $HOME/Project/${linuxtype}/$choice/DEBIAN/control | grep Architecture >> $PREFIX/tmp/edited-deb.log
    cat $PREFIX/tmp/edited-deb.log
    echo ""
    sed -i "s/: /=/" $PREFIX/tmp/edited-deb.log
    . $PREFIX/tmp/edited-deb.log
    sed -i "s/=/: /" $PREFIX/tmp/edited-deb.log
    if [ "$DISPLAY" == "" ]; then
        read -p "Use the previous name?: ${Package} [Y/n]" input1;
        if [ "$input1" == "Y" ] || [ "$input1" == "y" ] || [ "$input1" == "" ]; then
            pkgname=${Package}
        else
            echo -n "New name: "
            if dpkg -s shizuku &>/dev/null; then
                shizuku input text "$Package" 2>/dev/null
            fi
            read pkgname
        fi
        read -p "Use the previous version?: ${Version} [Y/n]" input2;
        if [ "$input2" == "Y" ] || [ "$input2" == "y" ] || [ "$input2" == "" ]; then
            newversion=${Version}
        else
            echo -n "New version: "
            if dpkg -s shizuku &>/dev/null; then
                shizuku input text "$Version" 2>/dev/null
            fi
            read newversion
        fi
        read -p "Use the previous architecture?: ${Architecture} [Y/n]" input3;
        if [ "$input3" == "Y" ] || [ "$input3" == "y" ] || [ "$input3" == "" ]; then
            archtype=${Architecture}
        else
            echo -n "New architecture: "
            if dpkg -s shizuku &>/dev/null; then
                shizuku input text "$Architecture" 2>/dev/null
            fi
            read archtype
        fi
    else
        echo -n "New name: "
        xdotool type "$Package" 2>/dev/null
        read pkgname
        echo -n "New version: "
        xdotool type "$Version" 2>/dev/null
        read newversion
        echo -n "New architecture: "
        xdotool type "$Architecture" 2>/dev/null
        read archtype
    fi
    read -p "Rename source folder with new architecture? [Y/n]" rename;
    if [ "$rename" == "Y" ] || [ "$rename" == "y" ] || [ "$rename" == "" ]; then
        mv $HOME/Project/${linuxtype}/${choice} $HOME/Project/${linuxtype}/${pkgname}_${newversion}_${archtype}
    else
        cp -r $HOME/Project/${linuxtype}/${choice} $HOME/Project/${linuxtype}/${pkgname}_${newversion}_${archtype}
    fi
    sed -i "s/${Version}/${newversion}/" $HOME/Project/${linuxtype}/${pkgname}_${newversion}_${archtype}/DEBIAN/control
    if [ "$linuxtype" == "termux" ]; then
        bindir=$(ls $HOME/Project/${linuxtype}/${pkgname}_${newversion}_${archtype}/data/data/com.termux/files/usr/bin/)
        for i in $bindir; do
            if [ -f $HOME/Project/${linuxtype}/${pkgname}_${newversion}_${archtype}/data/data/com.termux/files/usr/bin/$i ]; then
                if grep -q "${Version}" $HOME/Project/${linuxtype}/${pkgname}_${newversion}_${archtype}/data/data/com.termux/files/usr/bin/$i; then
                    sed -i "s/${Version}/${newversion}/" $HOME/Project/${linuxtype}/${pkgname}_${newversion}_${archtype}/data/data/com.termux/files/usr/bin/$i
                fi
            fi
        done
        unset i
    elif [ "$linuxtype" == "debian" ]; then
        bindir=$(ls $HOME/Project/${linuxtype}/${pkgname}_${newversion}_${archtype}/usr/local/bin/)
        for i in $bindir; do
            if [ -f $HOME/Project/${linuxtype}/${pkgname}_${newversion}_${archtype}/usr/local/bin/$i ]; then
                if grep -q "${Version}" $HOME/Project/${linuxtype}/${pkgname}_${newversion}_${archtype}/usr/local/bin/$i; then
                    sed -i "s/${Version}/${newversion}/" $HOME/Project/${linuxtype}/${pkgname}_${newversion}_${archtype}/usr/local/bin/$i
                fi
            fi
        done
        unset i
    fi
    if grep -q "${Architecture}" $HOME/Project/${linuxtype}/${pkgname}_${newversion}_${archtype}/DEBIAN/control; then
        sed -i "s/${Architecture}/${archtype}/" $HOME/Project/${linuxtype}/${pkgname}_${newversion}_${archtype}/DEBIAN/control
    fi
    if grep -q "${Package}" $HOME/Project/${linuxtype}/${pkgname}_${newversion}_${archtype}/DEBIAN/control; then
        sed -i "s/${Package}/${pkgname}/" $HOME/Project/${linuxtype}/${pkgname}_${newversion}_${archtype}/DEBIAN/control
    fi
    chmod 755 $HOME/Project/${linuxtype}/${pkgname}_${newversion}_${archtype}/DEBIAN -R
}

function show_help() {
    echo -e "Build Deb

Usage: build-deb [command] [options]

Command:
    source                        : create packages
    start                         : build deb from packages
    update                        : update sourc package

Options:
    -h, --help                    : show this help
    -v, --version                 : show the Version

try: [git-repo -h] to build github repository

for more info visit: https://github.com/ArieSR91
"
}

case $1 in
    start)
        build_deb
        ;;
    source)
        build_source
        ;;
    update)
        update_source
        ;;
    -v | --version)
        echo "1.8.8-SR"
        ;;
    -h | --help | *)
        show_help
        ;;
esac
