Загрузка данных


package main

import (
	"bufio"
	"fmt"
	"math/rand"
	"os"
	"strings"
	"time"
)

func main() {
	// Инициализация генератора случайных чисел
	rand.Seed(time.Now().UnixNano())

	reader := bufio.NewReader(os.Stdin)

	fmt.Println("Привет! Я бот-помощник. Вот список доступных команд:")
	showHelp()

	for {
		fmt.Print("\nВведите команду или категорию (или 'help' для справки, 'exit' для выхода): ")
		input, err := reader.ReadString('\n')
		if err != nil {
			fmt.Println("Ошибка чтения ввода:", err)
			continue
		}

		input = strings.TrimSpace(strings.ToLower(input))

		if input == "exit" {
			fmt.Println("До свидания!")
			break
		}

		switch input {
		case "help", "помощь":
			showHelp()
		case "фильм по жанру", "1":
			recommendMovieByGenre(reader)
		case "фильм по настроению", "2":
			recommendMovieByMood(reader)
		case "музыка по жанру", "3":
			recommendMusicByGenre(reader)
		case "музыка по настроению", "4":
			recommendMusicByMood(reader)
		case "анекдот", "5":
			tellJoke()
		case "каталог мерча", "6":
			showMerchCatalog()
		case "купить мерч", "7":
			buyMerch(reader)
		default:
			fmt.Println("Я не понял команду. Введите 'help' для просмотра доступных функций.")
		}
	}
}

func showHelp() {
	fmt.Println("\n--- Доступные функции ---")
	fmt.Println("1. Рекомендация фильма по жанру (введите: фильм по жанру)")
	fmt.Println("2. Рекомендация фильма по настроению (введите: фильм по настроению)")
	fmt.Println("3. Рекомендация музыки по жанру (введите: музыка по жанру)")
	fmt.Println("4. Рекомендация музыки по настроению (введите: музыка по настроению)")
	fmt.Println("5. Рассказать анекдот (введите: анекдот)")
	fmt.Println("6. Вывести каталог мерча (введите: каталог мерча)")
	fmt.Println("7. Купить мерч / Интерфейс покупки (введите: купить мерч)")
	fmt.Println("-------------------------")
}

func recommendMovieByGenre(reader *bufio.Reader) {
	fmt.Println("\nВыберите жанр (фантастика, комедия, драма, боевик):")
	genre, _ := reader.ReadString('\n')
	genre = strings.TrimSpace(strings.ToLower(genre))

	switch genre {
	case "фантастика":
		fmt.Println("Рекомендую посмотреть: «Интерстеллар»")
	case "комедия":
		fmt.Println("Рекомендую посмотреть: «Шоу Трумана»")
	case "драма":
		fmt.Println("Рекомендую посмотреть: «Побег из Шоушенка»")
	case "боевик":
		fmt.Println("Рекомендую посмотреть: «Тёмный рыцарь»")
	default:
		fmt.Println("К сожалению, такого жанра у меня нет в базе.")
	}
}

func recommendMovieByMood(reader *bufio.Reader) {
	fmt.Println("\nКакое у вас настроение? (грустное, веселое, напряженное):")
	mood, _ := reader.ReadString('\n')
	mood = strings.TrimSpace(strings.ToLower(mood))

	switch mood {
	case "грустное":
		fmt.Println("Советую посмотреть добрую комедию: «Амели»")
	case "веселое":
		fmt.Println("Поддержите настроек отличным экшеном: «Безумный Макс: Дорога ярости»")
	case "напряженное":
		fmt.Println("Расслабьтесь за просмотром легкого мультфильма: «Душа»")
	default:
		fmt.Println("Интересное настроение! Посмотрите «Форрест Гамп» — он подходит под любое.")
	}
}

func recommendMusicByGenre(reader *bufio.Reader) {
	fmt.Println("\nВыберите музыкальный жанр (рок, рэп, поп, электроника):")
	genre, _ := reader.ReadString('\n')
	genre = strings.TrimSpace(strings.ToLower(genre))

	switch genre {
	case "рок":
		fmt.Println("Трек для вас: Linkin Park - In the End")
	case "рэп":
		fmt.Println("Трек для вас: Travis Scott - SICKO MODE")
	case "поп":
		fmt.Println("Трек для вас: The Weeknd - Blinding Lights")
	case "электроника":
		fmt.Println("Трек для вас: Daft Punk - Get Lucky")
	default:
		fmt.Println("Не знаю такого жанра, но послушайте классику!")
	}
}

func recommendMusicByMood(reader *bufio.Reader) {
	fmt.Println("\nКакое у вас настроение для музыки? (бодрое, расслабленное, грустное):")
	mood, _ := reader.ReadString('\n')
	mood = strings.TrimSpace(strings.ToLower(mood))

	switch mood {
	case "бодрое":
		fmt.Println("Включайте фонк или энергичный рэп!")
	case "расслабленное":
		fmt.Println("Подойдет лоу-фай хип-хоп (Lofi Beats).")
	case "грустное":
		fmt.Println("Синти-поп или меланхоличный рок помогут пережить этот момент.")
	default:
		fmt.Println("Включайте плейлист 'Победитель' — не прогадаете.")
	}
}

func tellJoke() {
	jokes := []string{
		"Программист — это тот, кто решает проблему, о которой вы не знали, способом, который вам непонятен.",
		"Встречаются два программиста:\n— Как дела?\n— Да нормально, жена попросила сходить в магазин и купить батон, а если будут яйца — взять десяток. Я вернулся с десятью батонами.",
		"Почему программисты не любят природу? Слишком много багов.",
		"Существует 10 типов людей: те, кто понимает двоичную систему, и те, кто нет.",
	}

	index := rand.Intn(len(jokes))
	fmt.Printf("\nАнекдот:\n%s\n", jokes[index])
}

func showMerchCatalog() {
	fmt.Println("\n--- Каталог мерча ---")
	fmt.Println("1. Футболка с логотипом — 1500 руб.")
	fmt.Println("2. Худи фирменное — 3200 руб.")
	fmt.Println("3. Кружка керамическая — 600 руб.")
	fmt.Println("4. Стикерпак — 300 руб.")
	fmt.Println("---------------------")
}

func buyMerch(reader *bufio.Reader) {
	showMerchCatalog()
	fmt.Print("\nВведите номер товара, который хотите купить: ")
	choice, _ := reader.ReadString('\n')
	choice = strings.TrimSpace(choice)

	var item string
	switch choice {
	case "1":
		item = "Футболка с логотипом"
	case "2":
		item = "Худи фирменное"
	case "3":
		item = "Кружка керамическая"
	case "4":
		item = "Стикерпак"
	default:
		fmt.Println("Неверный выбор товара.")
		return
	}

	fmt.Printf("Вы выбрали: %s.\n", item)
	
	fmt.Print("Введите ваше имя для заказа: ")
	name, _ := reader.ReadString('\n')
	name = strings.TrimSpace(name)

	fmt.Print("Введите адрес доставки: ")
	address, _ := reader.ReadString('\n')
	address = strings.TrimSpace(address)

	fmt.Printf("\nСпасибо за заказ, %s! Товар «%s» успешно оформлен для доставки по адресу: %s.\n", name, item, address)
	fmt.Println("(Интеграция с платежной системой в данной версии прототипа отключена).")
}