#!/bin/bash

TYP="$1"
WARTOSC="$2"
Z="$3"
DO="$4"

function wyswietl_pomoc {
    echo "Użycie: $0 <typ> <wartość> <z> <do>"
    echo ""
    echo "Typy jednostek:"
    echo "  dlugosc  - konwersja długości"
    echo "  temperatura - konwersja temperatury"
    echo "  waga     - konwersja wagi"
    echo ""
    echo "Jednostki długości:"
    echo "  m   - metry"
    echo "  ft  - stopy"
    echo "  cm  - centymetry"
    echo "  in  - cale"
    echo ""
    echo "Jednostki temperatury:"
    echo "  c   - Celsiusz"
    echo "  f   - Fahrenheit"
    echo "  k   - Kelvin"
    echo ""
    echo "Jednostki wagi:"
    echo "  kg  - kilogramy"
    echo "  lb  - funty"
    echo "  g   - gramy"
    echo "  oz  - uncje"
    echo ""
    echo "Przykłady:"
    echo "  $0 dlugosc 100 m ft"
    echo "  $0 temperatura 0 c f"
    echo "  $0 waga 1 kg lb"
    exit 1
}

if [[ $# -ne 4 ]]; then
    wyswietl_pomoc
fi

if [[ ! "$WARTOSC" =~ ^-?[0-9]*\.?[0-9]+$ ]]; then
    echo "Błąd: '$WARTOSC' nie jest liczbą"
    exit 1
fi

if [[ "$TYP" == "dlugosc" ]]; then
    case "$Z" in
        m)
            case "$DO" in
                ft) wynik=$(echo "scale=4; $WARTOSC * 3.28084" | bc);;
                cm) wynik=$(echo "scale=4; $WARTOSC * 100" | bc);;
                in) wynik=$(echo "scale=4; $WARTOSC * 39.3701" | bc);;
                m)  wynik="$WARTOSC";;
                *) echo "Błąd: Nieznana jednostka '$DO'"; exit 1;;
            esac
            ;;
        ft)
            case "$DO" in
                m)  wynik=$(echo "scale=4; $WARTOSC / 3.28084" | bc);;
                cm) wynik=$(echo "scale=4; $WARTOSC * 30.48" | bc);;
                in) wynik=$(echo "scale=4; $WARTOSC * 12" | bc);;
                ft) wynik="$WARTOSC";;
                *) echo "Błąd: Nieznana jednostka '$DO'"; exit 1;;
            esac
            ;;
        cm)
            case "$DO" in
                m)  wynik=$(echo "scale=4; $WARTOSC / 100" | bc);;
                ft) wynik=$(echo "scale=4; $WARTOSC / 30.48" | bc);;
                in) wynik=$(echo "scale=4; $WARTOSC / 2.54" | bc);;
                cm) wynik="$WARTOSC";;
                *) echo "Błąd: Nieznana jednostka '$DO'"; exit 1;;
            esac
            ;;
        in)
            case "$DO" in
                m)  wynik=$(echo "scale=4; $WARTOSC * 0.0254" | bc);;
                ft) wynik=$(echo "scale=4; $WARTOSC / 12" | bc);;
                cm) wynik=$(echo "scale=4; $WARTOSC * 2.54" | bc);;
                in) wynik="$WARTOSC";;
                *) echo "Błąd: Nieznana jednostka '$DO'"; exit 1;;
            esac
            ;;
        *) echo "Błąd: Nieznana jednostka '$Z'"; exit 1;;
    esac
    
    wynik=$(printf "%.2f" "$wynik")
    
    echo "=================================="
    echo "  KONWERTER JEDNOSTEK"
    echo "=================================="
    echo "Wynik: $WARTOSC $Z = $wynik $DO"
    echo "=================================="
    exit 0

elif [[ "$TYP" == "temperatura" ]]; then
    case "$Z" in
        c)
            case "$DO" in
                f) wynik=$(echo "scale=4; $WARTOSC * 9 / 5 + 32" | bc);;
                k) wynik=$(echo "scale=4; $WARTOSC + 273.15" | bc);;
                c) wynik="$WARTOSC";;
                *) echo "Błąd: Nieznana jednostka '$DO'"; exit 1;;
            esac
            ;;
        f)
            case "$DO" in
                c) wynik=$(echo "scale=4; ($WARTOSC - 32) * 5 / 9" | bc);;
                k) wynik=$(echo "scale=4; ($WARTOSC - 32) * 5 / 9 + 273.15" | bc);;
                f) wynik="$WARTOSC";;
                *) echo "Błąd: Nieznana jednostka '$DO'"; exit 1;;
            esac
            ;;
        k)
            case "$DO" in
                c) wynik=$(echo "scale=4; $WARTOSC - 273.15" | bc);;
                f) wynik=$(echo "scale=4; ($WARTOSC - 273.15) * 9 / 5 + 32" | bc);;
                k) wynik="$WARTOSC";;
                *) echo "Błąd: Nieznana jednostka '$DO'"; exit 1;;
            esac
            ;;
        *) echo "Błąd: Nieznana jednostka '$Z'"; exit 1;;
    esac
    
    wynik=$(printf "%.2f" "$wynik")
    
    echo "=================================="
    echo "  KONWERTER JEDNOSTEK"
    echo "=================================="
    echo "Wynik: $WARTOSC$Z = $wynik$DO"
    echo "=================================="
    exit 0

elif [[ "$TYP" == "waga" ]]; then
    case "$Z" in
        kg)
            case "$DO" in
                lb) wynik=$(echo "scale=4; $WARTOSC * 2.20462" | bc);;
                g)  wynik=$(echo "scale=4; $WARTOSC * 1000" | bc);;
                oz) wynik=$(echo "scale=4; $WARTOSC * 35.274" | bc);;
                kg) wynik="$WARTOSC";;
                *) echo "Błąd: Nieznana jednostka '$DO'"; exit 1;;
            esac
            ;;
        lb)
            case "$DO" in
                kg) wynik=$(echo "scale=4; $WARTOSC / 2.20462" | bc);;
                g)  wynik=$(echo "scale=4; $WARTOSC * 453.592" | bc);;
                oz) wynik=$(echo "scale=4; $WARTOSC * 16" | bc);;
                lb) wynik="$WARTOSC";;
                *) echo "Błąd: Nieznana jednostka '$DO'"; exit 1;;
            esac
            ;;
        g)
            case "$DO" in
                kg) wynik=$(echo "scale=4; $WARTOSC / 1000" | bc);;
                lb) wynik=$(echo "scale=4; $WARTOSC / 453.592" | bc);;
                oz) wynik=$(echo "scale=4; $WARTOSC / 28.3495" | bc);;
                g)  wynik="$WARTOSC";;
                *) echo "Błąd: Nieznana jednostka '$DO'"; exit 1;;
            esac
            ;;
        oz)
            case "$DO" in
                kg) wynik=$(echo "scale=4; $WARTOSC * 0.0283495" | bc);;
                lb) wynik=$(echo "scale=4; $WARTOSC / 16" | bc);;
                g)  wynik=$(echo "scale=4; $WARTOSC * 28.3495" | bc);;
                oz) wynik="$WARTOSC";;
                *) echo "Błąd: Nieznana jednostka '$DO'"; exit 1;;
            esac
            ;;
        *) echo "Błąd: Nieznana jednostka '$Z'"; exit 1;;
    esac
    
    wynik=$(printf "%.2f" "$wynik")
    
    echo "=================================="
    echo "  KONWERTER JEDNOSTEK"
    echo "=================================="
    echo "Wynik: $WARTOSC $Z = $wynik $DO"
    echo "=================================="
    exit 0

else
    echo "Błąd: Nieznany typ '$TYP'"
    wyswietl_pomoc
fi