@echo off
setlocal EnableDelayedExpansion
cd /d "%~dp0"

rem EDIT THESE SETTINGS. The worker is the suffix after the wallet's dot.
rem Merge-mining request on a compatible pool: PEARL_ADDRESS+NOCK_ADDRESS.worker
rem Replace BOTH public payout addresses with your own. Plus joins wallets; dot starts worker.
set "POOL=stratum+tcp://poolmouillay.com:3361"
set "WALLET_WORKER=prl1pt8t3tffncrwlfgp28mfh2kljgk29g480e8fzw49k0q7rc9lwc06s79c60j.worker"
rem 0 = detect physical cores and ask; a positive number starts without asking.
set "CPU_THREADS=0"
rem Optional positive integer difficulty. Empty = pool default. Requires pool support.
set "SHARE_DIFFICULTY="

set "MINING_PASSWORD="
if defined SHARE_DIFFICULTY (
    set "BAD_DIFFICULTY="
    for /f "delims=0123456789" %%D in ("!SHARE_DIFFICULTY!") do set "BAD_DIFFICULTY=1"
    set "DIFF_NONZERO="
    for /f "delims=0" %%D in ("!SHARE_DIFFICULTY!") do set "DIFF_NONZERO=%%D"
    if not defined DIFF_NONZERO set "BAD_DIFFICULTY=1"
    if defined BAD_DIFFICULTY (
        echo SHARE_DIFFICULTY must be empty or a positive integer.
        pause
        exit /b 2
    )
    set "MINING_PASSWORD=d=!SHARE_DIFFICULTY!"
)

echo Mouillay CPU Miner
echo Requires Windows x64 and an AVX2-capable CPU.
echo Pool: %POOL%
echo Wallet.worker: %WALLET_WORKER%
if "!CPU_THREADS!"=="0" (
    set "DETECTED_CORES="
    for /f "delims=" %%C in ('MouillayCPUMiner.exe --physical-cores 2^>nul') do set "DETECTED_CORES=%%C"
    if not defined DETECTED_CORES (
        echo Physical-core detection unavailable. Using 1 worker as a safe default.
        set "DETECTED_CORES=1"
    )
    echo Detected physical CPU cores: !DETECTED_CORES!
    set "THREAD_CHOICE="
    set /p "THREAD_CHOICE=CPU workers to use [Enter = !DETECTED_CORES!]: "
    set "CPU_THREADS=!DETECTED_CORES!"
    if defined THREAD_CHOICE set "CPU_THREADS=!THREAD_CHOICE!"
)
set "BAD_THREADS="
for /f "delims=0123456789" %%A in ("!CPU_THREADS!") do set "BAD_THREADS=1"
if not defined CPU_THREADS set "BAD_THREADS=1"
set "NONZERO="
for /f "delims=0" %%A in ("!CPU_THREADS!") do set "NONZERO=%%A"
if not defined NONZERO set "BAD_THREADS=1"
if defined BAD_THREADS goto invalid_threads
echo CPU workers: !CPU_THREADS!
rem Preserve exclamation marks in any explicitly supplied command-line arguments.
setlocal DisableDelayedExpansion

"%~dp0MouillayCPUMiner.exe" --pool "%POOL%" --wallet-worker "%WALLET_WORKER%" --threads "%CPU_THREADS%" --password "%MINING_PASSWORD%" --seconds 0 %*
set "MINER_EXIT=%ERRORLEVEL%"
if not "%MINER_EXIT%"=="0" echo Miner stopped with exit code %MINER_EXIT%.
pause
exit /b %MINER_EXIT%

:invalid_threads
echo Enter a positive whole number of CPU workers.
pause
exit /b 2
