// 4. hét – Stringek alapjai Go nyelven
// Futtatás: go run ./h04/stringbasics
package main

import (
	"fmt"
	"sort"
	"strconv"
	"strings"
)

func main() {
	s := "Hello, World"

	// Hossz BÁJTOKBAN, indexelés bájtot ad – O(1)
	fmt.Println("len =", len(s), ", s[4] =", s[4], "=", string(s[4]))

	// A string nem módosítható: s[0] = 'h' fordítási hiba lenne
	upper := strings.ToUpper(s)
	fmt.Println("s =", s, ", upper =", upper)

	// Összehasonlítás: Go-ban == a TARTALMAT hasonlítja össze
	a := "data"
	b := strings.Repeat("da", 1) + "ta"
	fmt.Println("a == b:", a == b)

	// Lexikografikus összehasonlítás: <, > operátorral vagy strings.Compare
	fmt.Println(`"apple" < "banana":`, "apple" < "banana", `, "Zebra" < "apple":`, "Zebra" < "apple")
	fmt.Println("EqualFold:", strings.EqualFold("Go", "GO"))

	// Keresés
	fmt.Println("Index(o) =", strings.Index(s, "o"), ", LastIndex(o) =", strings.LastIndex(s, "o"),
		", Contains(World) =", strings.Contains(s, "World"))

	// Részstring szeleteléssel: [kezdő:vég) – BÁJTindexek!
	fmt.Println("s[7:] =", s[7:], ", s[:5] =", s[:5])

	// Darabolás, összefűzés
	parts := strings.Split("Wuhan,Beijing,Shanghai", ",")
	fmt.Printf("Split: %q\n", parts)
	fmt.Println("Join: ", strings.Join(parts, " | "))
	fmt.Println("Fields:", strings.Fields("  több   szóköz  között "))

	// Csere, levágás
	fmt.Println("ReplaceAll:", strings.ReplaceAll(s, "World", "Hubei"))
	fmt.Printf("TrimSpace: [%s]\n", strings.TrimSpace("   text   "))

	// String <-> bájt/rune szelet
	r := []rune(s)
	sort.Slice(r, func(i, j int) bool { return r[i] < r[j] })
	fmt.Println("rendezett karakterek:", strings.TrimSpace(string(r)))

	// Szám <-> string
	n, err := strconv.Atoi("42")
	fmt.Println("Atoi + 1 =", n+1, err, ", Itoa =", strconv.Itoa(7)+"!")
}
