#!/usr/bin/env bash

echo "===== TWORZENIE NOWEJ GAŁĘZI ====="

# ────────────────────────────────────────────────
# Najpierw zbieramy wszystkie odpowiedzi od użytkownika
# ────────────────────────────────────────────────

echo ""
echo "Jakiego typu zmiana?"
echo "  1 = fix         (poprawka błędu)"
echo "  2 = feat        (nowa funkcjonalność)"
echo "  3 = refactor    (poprawa kodu bez zmiany zachowania)"
echo "  4 = docs        (dokumentacja)"
echo "  5 = inne        (wpisz własną prefiksa)"
echo -n "Wybierz numer (Enter = fix): "

read -r choice

case "$choice" in
    1|"") PREFIX="fix" ;;
    2)    PREFIX="feat" ;;
    3)    PREFIX="refactor" ;;
    4)    PREFIX="docs" ;;
    5)    echo -n "Wpisz własny prefix (np. chore, test, style): "
          read -r PREFIX ;;
    *)    PREFIX="$choice" ;;
esac

echo -n "Krótki opis zmiany (bez spacji, myślniki zamiast spacji): "
read -r DESC

if [ -z "$DESC" ]; then
    echo "❌ Opis nie może być pusty!"
    exit 1
fi

# Czyszczenie opisu
DESC=$(echo "$DESC" | tr '[:upper:]' '[:lower:]' | tr -s ' ' '-' | tr -cd '[:alnum:]-')

PROPOSED_BRANCH="${PREFIX}-${DESC}"

echo ""
echo "Proponowana nazwa gałęzi: ${PROPOSED_BRANCH}"
echo -n "Zatwierdzasz? [T/n]: "
read -r confirm

if [[ "$confirm" =~ ^[Nn]$ ]]; then
    echo -n "Wpisz własną nazwę gałęzi: "
    read -r BRANCH
    if [ -z "$BRANCH" ]; then
        echo "❌ Anulowano."
        exit 1
    fi
else
    BRANCH="${PROPOSED_BRANCH}"
fi

# ────────────────────────────────────────────────
# Teraz dopiero zaczynamy operacje git
# ────────────────────────────────────────────────

echo ""
echo "Przygotowuję main..."

# Zapisujemy ewentualne niezacommitowane zmiany
echo "→ Zapisuję bieżące niezacommitowane zmiany (stash)..."
git stash push -m "automatyczny stash przed git-start $(date '+%Y-%m-%d %H:%M')" || true

# Przełączamy się na main
git checkout main 2>/dev/null || { echo "❌ Nie udało się przełączyć na main"; exit 1; }

# Aktualizujemy main
echo "→ Pobieram najnowszy main..."
git pull origin main

if [ $? -ne 0 ]; then
    echo "❌ Błąd podczas git pull. Sprawdź połączenie / uprawnienia."
    # Przywracamy stash jeśli był
    git stash pop || true
    exit 1
fi

# Przywracamy ewentualne zmiany użytkownika na czystym mainie
echo "→ Przywracam Twoje zmiany (jeśli były schowane)..."
git stash pop || echo "Nie było schowanych zmian – OK"

# Tworzymy nową gałąź
echo "→ Tworzę gałąź: $BRANCH"
git checkout -b "$BRANCH"

if [ $? -ne 0 ]; then
    echo "❌ Błąd – gałąź $BRANCH prawdopodobnie już istnieje."
    git branch
    # Przywracamy stan sprzed próby (opcjonalnie)
    git checkout main
    exit 1
fi

echo ""
echo "✅ Jesteś teraz na gałęzi: $BRANCH"
echo "Po skończeniu pracy uruchom: ./git-done.sh"
