#!/usr/bin/env bash

itzultool_version=0.4
itzultool_filename=itzultool-"$itzultool_version"-linux-x64
steamfolder="Overcooked/Overcooked_Data"
gogfolder="Overcooked/game/Overcooked_Data"
emipurl="https://lainoa.gamerauntsia.eus/public.php/dav/files/BdWedSK3mRCQwBH/?accept=zip"
emipfilename=overcooked-eu.emip
tempfolder=.overcooked-instalazioa
gamename="Overcooked"

ascii=$(cat <<'END'
                                                                     
  ,ad8888ba,  8b           d8 88888888888 88888888ba    ,ad8888ba,   
 d8"'    `"8b `8b         d8' 88          88      "8b  d8"'    `"8b  
d8'        `8b `8b       d8'  88          88      ,8P d8'            
88          88  `8b     d8'   88aaaaa     88aaaaaa8P' 88             
88          88   `8b   d8'    88"""""     88""""88'   88             
Y8,        ,8P    `8b d8'     88          88    `8b   Y8,            
 Y8a.    .a8P      `888'      88          88     `8b   Y8a.    .a8P  
  `"Y8888Y"'        `8'       88888888888 88      `8b   `"Y8888Y"'   
                                                                                                                                          
  ,ad8888ba,     ,ad8888ba,   88      a8P  88888888888 88888888ba,    
 d8"'    `"8b   d8"'    `"8b  88    ,88'   88          88      `"8b   
d8'        `8b d8'        `8b 88  ,88"     88          88        `8b  
88          88 88          88 88,d88'      88aaaaa     88         88  
88          88 88          88 8888"88,     88"""""     88         88  
Y8,        ,8P Y8,        ,8P 88P   Y8b    88          88         8P  
 Y8a.    .a8P   Y8a.    .a8P  88     "88,  88          88      .a8P   
  `"Y8888Y"'     `"Y8888Y"'   88       Y8b 88888888888 88888888Y"'                           
                                                                    
END
)

endascii=$(cat <<'END'
                                                                                
                                                                                
                        .                                                       
                      c0.                                                       
               :'    cMx       .c                                               
              oX     XMx      .Xl                                               
              XN     KMX.     lMo                                               
              dMO    ;WMK.    .NW;                                              
               dMO    :WMN.    'NW,                                             
                0W.    :MMk     ;Mx                                             
                k0      0M0     .W;                                             
                c       kM:     ':                                              
                        Ol                                                      
                       ..                                                       
                                                          ....'',;::cclooc.     
    O000000000000000000000000000000000000000d    .,;:c.OWMMMMMMMMMMMMMMMMMWc    
    KMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMOk000OOkxd,KMMMMMMMMMMMMMMMMMMMd    
    :MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMN.           ';,,,,,,,,;;codxkx:     
     cWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMN,                                    
      .ONMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMXx.                                     
                                                                                
                                                                                
                                                                                
                                                                                
END
)

# FUNTZIOAK

initial_config() {
	# Aukeratu denda
	while true; do
		read -p "Zein dendatatik instalatu duzu jokoa?
		1: Steam
		2: GOG
		3: Beste bat
		(idatzi 1, 2 edo 3 eta sakatu SARTU tekla)
		" storeop
		case $storeop in
		    1 ) store='steam'; break;;
		    2 ) store='gog'; break;;
		    3 ) store='other'; break;;
		    * ) echo "
		    OKERREKO AUKERA. Idatzi 1 (Steam), 2 (GOG) edo 3 (Beste bat) eta sakatu SARTU tekla.
		    ";;		
		esac
	done
}

get_steam_path() {
	echo "STEAM dendako jokoaren instalazioa bilatzen..."	
	steamconfigpath=~/.steam/steam/config/libraryfolders.vdf
	if [[ ! -f "$steamconfigpath" ]]; then
		steamconfigpath=~/.var/app/com.valvesoftware.Steam/.local/share/Steam/config/libraryfolders.vdf
		if [[ ! -f "$steamconfigpath" ]]; then
		    steamconfigpath=""
		    echo "EZIN IZAN DA STEAMEKO KONFIGURAZIO FITXATEGIA AURKITU."
		fi
	fi

	if [[ ! -z "$steamconfigpath" ]]; then
		while read -r line; do
		    if [[ $line == \"path\"* ]]; then
		        base=$(echo $line | cut -d '"' -f 4)
		        optpath="$base"/steamapps/common/$steamfolder
		        if [[ -d "$optpath" ]]; then
		            paths+=("$optpath")
		            #echo "Konfigurazioan $optpath aurkitu da..."
		        fi
		    fi
		done < "$steamconfigpath"

		if [[ ${#paths[@]} > 0 ]]; then
		    if [[ ${#paths[@]} == 1 ]]; then
		        path=${paths[0]}
		    else
		        # Galdetu erabiltzaileari
		        echo "Jokoarentzako karpeta posible bat baino gehiago aurkitu dira. Zein da jokoaren benetako karpeta?"
		        select selpath in "${paths[@]}"; do
		            if [[ -z "$selpath" ]]; then
		                printf 'Okerreko aukera.\n' "$selpath" >&2
		            else
		                path="$selpath"
		                break
		            fi
		        done
		    fi
		fi
	fi
}

get_gog_path() {
	echo "GOG dendako jokoaren instalazioa bilatzen..."
	paths[0]="`eval echo ~/GOG Games/$gogfolder`"
	
	if [[ ${#paths[@]} > 0 ]]; then
	    if [[ ${#paths[@]} == 1 ]]; then
	    	if [[ -d "${paths[0]}" ]]; then
		        path=${paths[0]}
	        fi
	    else
	        # Galdetu erabiltzaileari
	        echo "Jokoarentzako karpeta posible bat baino gehiago aurkitu dira. Zein da jokoaren benetako karpeta?"
	        select selpath in "${paths[@]}"; do
	            if [[ -z "$selpath" ]]; then
	                printf 'Okerreko aukera.\n' "$selpath" >&2
	            else
	                path="$selpath"
	                break
	            fi
	        done
	    fi
	fi
}

set_path_manually() {
	read -p "Ez da jokoaren karpeta aurkitu. Idatzi eskuz non dagoen.
    (adb. /home/erabiltzailea/.steam/steam/steamapps/common/$steamfolder)
    Kokalekua: " path
    while [[ ! -d "$path" ]]; do
        read -p "Sartutako kokalekua ez da existitzen. Saiatu berriz.
        (adb. /home/erabiltzailea/.steam/steam/steamapps/common/$steamfolder)
        Kokalekua: " path
    done
}

get_game_path() {
	path=""
	paths=()

	case $store in

		steam)
		get_steam_path
		;;
		
		gog)
		get_gog_path
		;;
		
	esac

	if [[ -z "$path" ]]; then
		set_path_manually
	fi

	echo "Path: $path"
}

create_temp_folder() {
	mkdir $tempfolder
	cd $tempfolder
}

handle_error() {
	if [[ $ok == 0 ]]; then
		echo "Huts egin du."
		echo "Instalazioko fitxategiak ezabatzen..."
		cd ..
		rm -R $tempfolder/

		# Errorea
		echo ""
		echo "✗ ✗ ✗ ✗ ✗ ✗ ✗ ✗ ✗ ✗ ✗ ✗ ✗ ✗ ✗ ✗ ✗ ✗ ✗ ✗ ✗ ✗ ✗ ✗ ✗ ✗ ✗ ✗"
		echo "✗ ✗ ✗ ✗ ✗ ✗ ✗ ✗ ✗ ✗ ✗ ✗ ✗ ✗ ✗ ✗ ✗ ✗ ✗ ✗ ✗ ✗ ✗ ✗ ✗ ✗ ✗ ✗"
		echo ""
		echo "Arazoren bat gertatu da '$gamename' jokoaren euskaratzea instalatzean."
		
		exit 1
	fi
}

download_itzultool() {
	echo ""
	echo "ItzulTool deskargatzen..."

	# Deskargatu ItzulTool
	wget https://github.com/ibaios/itzultool/releases/download/v"$itzultool_version"/"$itzultool_filename" || ok=0

	handle_error

	chmod +x ./"$itzultool_filename" || ok=0

	handle_error

	echo "Deskargatuta."
}

download_emip() {
	echo ""
	echo "EMIP itzulpen-fitxategia deskargatzen..."

	# Deskargatu EMIP fitxategia
	wget "${emipurl}" -O ${emipfilename} || ok=0

	handle_error

	echo "Deskargatuta."
}

apply_emip() {
	echo ""
	echo "Itzulpena aplikatzen. Honek luze jo dezake..."

	# Aplikatu itzulpena
	./"$itzultool_filename" applyemip ${emipfilename} "$path" || ok=0

	handle_error
}

final_message() {
	echo ""
    echo "Instalazioko fitxategiak ezabatzen..."
    cd ..
    rm -R $tempfolder/
    echo "Eginda."

    # Instalatuta!
    echo ""
    echo "$endascii"
    echo ""
    echo "✔  Instalazioa behar bezala burutu da."
    echo "   Orain, '$gamename' euskaraz izango duzu."
}


# HASIERA
echo "$ascii"

echo "$gamename euskaraz - Instalatzen..."

initial_config

ok=1

get_game_path

create_temp_folder

download_itzultool

download_emip

apply_emip

final_message

exit 0

