@echo off
setlocal EnableDelayedExpansion

if "%~1"=="" (
    set "SOURCE=%USERPROFILE%\Documents"
) else (
    set "SOURCE=%~f1"
)

if "%~2"=="" (
    set "DEST=D:\Backup"
) else (
    set "DEST=%~f2"
)

set "MAX_BACKUPS=7"
set "LOG_FILE=backup_log.txt"

call :log "========================================"
call :log "ROZPOCZECIE KOPII Zapasowej"
call :log "Zrodlo: %SOURCE%"
call :log "Cel: %DEST%"
call :log "========================================"

if not exist "%SOURCE%" (
    call :log "BLAD: Zrodlo '%SOURCE%' nie istnieje!"
    echo Blad: Zrodlo '%SOURCE%' nie istnieje!
    exit /b 1
)

if not exist "%DEST%" (
    mkdir "%DEST%" 2>nul
    call :log "Utworzono katalog docelowy: %DEST%"
)

for /f "tokens=2 delims==" %%a in ('powershell -Command "Get-Date -Format 'yyyy-MM-dd_HH-mm-ss'"') do set TS=%%a

set "BACKUP_DIR=%DEST%\%TS%"

call :log "Tworzenie kopii: %BACKUP_DIR%"
mkdir "%BACKUP_DIR%" 2>nul

xcopy /e /i /h /y "%SOURCE%" "%BACKUP_DIR%\" >nul 2>&1
if errorlevel 1 (
    call :log "BLAD: Problem z kopiowaniem plikow!"
    echo Blad podczas kopiowania!
    exit /b 1
)

call :log "Kopia zapasowa utworzona pomyslnie"

set "COUNT=0"
for /d %%D in ("%DEST%\*") do (
    set /a COUNT+=1
)

call :log "Aktualna liczba kopii: %COUNT%"

if %COUNT% GTR %MAX_BACKUPS% (
    call :log "Rozpoczecie czyszczenia starych kopii..."
    
    set /a TO_DELETE=%COUNT% - %MAX_BACKUPS%
    call :log "Do usuniecia: %TO_DELETE% kopii"
    
    for /f "tokens=1,2 delims=: " %%A in ('dir /ad /b /o-d "%DEST%"') do (
        if %TO_DELETE% GTR 0 (
            set "OLD_DIR=%DEST%\%%A"
            if exist "!OLD_DIR!" (
                rmdir /s /q "!OLD_DIR!" 2>nul
                call :log "Usunieto: !OLD_DIR!"
                set /a TO_DELETE-=1
            )
        )
    )
)

call :log "========================================"
call :log "Kopia zapasowa zakonczona pomyslnie"
call :log "========================================"

echo.
echo Kopia zapasowa utworzona!
echo Lokalizacja: %BACKUP_DIR%
echo.

endlocal
exit /b 0

:log
echo [%DATE% %TIME%] %~1 >> "%LOG_FILE%"
echo [%DATE% %TIME%] %~1
exit /b 0