@echo off
setlocal enableDelayedExpansion
set x=1
:Czyszczenie plikow tymczasowych:
del /Q /A:H "%~dp0Tools\keys.txt" >nul 2>&1
rmdir /s /Q "%~dp0Temp" >nul 2>&1
mkdir "%~dp0Temp" >nul 2>&1
:Sprawdzanie zawartosci folderow dla instalatorow:
If %x% == 1 (
	where /r "%~dp0Podstawka" *.nsp > "%~dp0Temp\bazansp.txt" 2> nul
	where /r "%~dp0Podstawka" *.xci > "%~dp0Temp\bazaxci.txt" 2> nul
	where /r "%~dp0Update" *.nsp > "%~dp0Temp\update.txt" 2> nul
)
If %x% == 1 (
	FINDSTR /R /N "^.*$" "%~dp0Temp\bazansp.txt" | FIND /C ":" > "%~dp0Temp\bazanspq.txt"
	FINDSTR /R /N "^.*$" "%~dp0Temp\update.txt" | FIND /C ":" > "%~dp0Temp\updateq.txt"
	FINDSTR /R /N "^.*$" "%~dp0Temp\bazaxci.txt" | FIND /C ":" > "%~dp0Temp\bazaxciq.txt"
	set /p bazanspq=< "%~dp0Temp\bazanspq.txt"
	set /p updateq=< "%~dp0Temp\updateq.txt"
	set /p bazaxciq=< "%~dp0Temp\bazaxciq.txt"
	set /p bazansp=< "%~dp0Temp\bazansp.txt"
	set /p update=< "%~dp0Temp\update.txt"
	set /p bazaxci=< "%~dp0Temp\bazaxci.txt"
	del /Q "%~dp0Temp\bazanspq.txt"
	del /Q "%~dp0Temp\updateq.txt"
	del /Q "%~dp0Temp\bazaxciq.txt"
	del /Q "%~dp0Temp\bazansp.txt"
	del /Q "%~dp0Temp\update.txt"
	del /Q "%~dp0Temp\bazaxci.txt"
)
:Bledy:
If %bazanspq% NEQ 0 (
	If %bazaxciq% NEQ 0 (
		echo Znaleziono pliki nsp i xci. Usun XCI i uruchom ponownie program.
		pause
		exit
	)
	If %bazanspq% NEQ 1 (
		echo Za duzo plikow nsp w folderze "baza". Usun niepotrzebne pliki i uruchom ponownie program.
		pause
		exit
	)
)
If %updateq% GTR 1 (
	echo Za duzo plikow nsp w folderze "update". Usun niepotrzebne pliki i uruchom ponownie program.
	pause
	exit
)
If %updateq% LSS 1 (
	echo Brak pliku nsp w folderze "update". Wstaw potrzebny plik i uruchom ponownie program.
	pause
	exit
)
If %bazanspq% LSS 1 (
	If %bazaxciq% LSS 1 (
		echo Brak plikow w folderze "baza". Wstaw potrzebny plik i uruchom ponownie program.
		pause
		exit
	)
	If %bazaxciq% GTR 0 (
		echo Patcher nie wspiera plikow xci. Wstaw prawidlowy plik nsp i uruchom ponownie program.
		pause
		exit
	)
)
	:Wypakowywanie NSP:
	If %updateq% EQU 1 (
		"%~dp0Tools\ma.exe" d "%~dp0Tools\tf.dat" "%~dp0Tools\keys.txt" >nul 2>nul
		attrib +H "%~dp0Tools\keys.txt"
		cd Tools
		squirrel.exe -o "%~dp0Temp\Baza" --NSP_copy_nca "%bazansp%"
		squirrel.exe -o "%~dp0Temp\Baza" --NSP_copy_ticket "%bazansp%"
		squirrel.exe -o "%~dp0Temp\Update" --NSP_copy_nca "%update%"
		squirrel.exe -o "%~dp0Temp\Update" --NSP_copy_ticket "%update%"
		cd ../
		del /Q /A:H "%~dp0Tools\keys.txt" >nul 2>nul
	)
	:Sprawdzanie obecnosci klucza z bazy:
	If %updateq% EQU 1 (
		where /r "%~dp0Temp\Baza" *.tik > "%~dp0Temp\bazatik.txt"
		set /p bazatik=< "%~dp0Temp\bazatik.txt"
		FINDSTR /R /N "^.*$" "%~dp0Temp\bazatik.txt" | FIND /C ":" > "%~dp0Temp\bazatikq.txt"
		set /p bazatikq=< "%~dp0Temp\bazatikq.txt"
		del /Q "%~dp0Temp\bazatik.txt"
		del /Q "%~dp0Temp\bazatikq.txt"
	)
	:Sprawdzanie obecnosci klucza z aktualizacji:
	If %updateq% EQU 1 (
		where /r "%~dp0Temp\Update" *.tik > "%~dp0Temp\updatetik.txt"
		set /p updatetik=< "%~dp0Temp\updatetik.txt"
		FINDSTR /R /N "^.*$" "%~dp0Temp\updatetik.txt" | FIND /C ":" > "%~dp0Temp\updatetikq.txt"
		set /p updatetikq=< "%~dp0Temp\updatetikq.txt"
		del /Q "%~dp0Temp\updatetik.txt"
		del /Q "%~dp0Temp\updatetikq.txt"
	)
	:Bledy:
	If %updatetikq% EQU 0 (
		echo "Brak klucza do nsp w folderze update. Mozliwe przyczyny: Plik nsp uszkodzony lub zmodyfikowany/skrypt uruchomiony jako administrator. Prosze wstawic wlasciwy plik nsp i sprobowac ponownie/nie uruchamiac jako administrator."
		pause
		exit
	)
	If %bazatikq% EQU 0 (
		echo Brak klucza do nsp w folderze baza. Plik nsp uszkodzony lub zmodyfikowany. Prosze wstawic wlasciwy plik nsp i sprobowac ponownie.
		pause
		exit
	)
	:Wyciaganie kluczy z bazy i aktualizacji:
	If %bazatikq% EQU 1 (
		"%~dp0Tools\tf.exe" "%bazatik%" > "%~dp0Temp\bazaklucz.txt"
		"%~dp0Tools\tf.exe" "%updatetik%" > "%~dp0Temp\updateklucz.txt"
		set /p bazaklucz=< "%~dp0Temp\bazaklucz.txt"
		set /p updateklucz=< "%~dp0Temp\updateklucz.txt"
		del /Q "%~dp0Temp\bazaklucz.txt"
		del /Q "%~dp0Temp\updateklucz.txt"
	)
	:Sprawdzanie, ktore pliki nalezy wypakowac:
	If %bazatikq% EQU 1 (
		forfiles /P "%~dp0Temp\Baza" /S /M * /C "cmd /c if @fsize GEQ 1048576000 echo @path" > "%~dp0Temp\bazaplik.txt"
		forfiles /P "%~dp0Temp\Update" /S /M * /C "cmd /c if @fsize GEQ 20485760 echo @path" > "%~dp0Temp\updateplik.txt"
	)
	:Czyszczenie pobranych danych:
	If %bazatikq% EQU 1 (
		type "%~dp0Temp\bazaplik.txt"|"%~dp0Tools\findrepl.bat" /o:2:2 > "%~dp0Temp\bazaplik2.txt"
		type "%~dp0Temp\updateplik.txt"|"%~dp0Tools\findrepl.bat" /o:2:2 > "%~dp0Temp\updateplik2.txt"
		set /p bazaplik2=< "%~dp0Temp\bazaplik2.txt"
		set /p updateplik2=< "%~dp0Temp\updateplik2.txt"
		del /Q "%~dp0Temp\bazaplik.txt"
		del /Q "%~dp0Temp\bazaplik2.txt"
		del /Q "%~dp0Temp\updateplik.txt"
		del /Q "%~dp0Temp\updateplik2.txt"
	)
	:Wypakowywanie nsp:
	If %bazatikq% EQU 1 (
		"%~dp0Tools\ma.exe" d "%~dp0Tools\tf.dat" "%~dp0Tools\keys.txt" >nul 2>nul
		attrib +H "%~dp0Tools\keys.txt"
		"%~dp0Tools\hactool.exe" -k "%~dp0Tools\keys.txt" -x --plaintext="%~dp0Temp\decoded.nca"  --section2dir="%~dp0Temp\Section2" --titlekey=%bazaklucz% %bazaplik2% 2>nul
		del /Q %bazaplik2%
		"%~dp0Tools\hactool.exe" -k "%~dp0Tools\keys.txt" -x --basenca="%~dp0Temp\decoded.nca" --section0dir="%~dp0Temp\Section0" --section1dir="%~dp0Temp\Section1" --titlekey=%updateklucz% %updateplik2% 2>nul
		del /Q "%~dp0Temp\decoded.nca"
		del /Q /A:H "%~dp0Tools\keys.txt" >nul 2>nul
		echo 1 etap z 4 zakonczony.
		timeout 5
		cls
	)