package ui

import (
	"bufio"
	"fmt"
	"os"
	"strings"

	"syscall"

	"golang.org/x/term"
)

var reader = bufio.NewReader(os.Stdin)

/**
 * @brief Считывание логина и пароля с консоли
 *
 * Логин вводится обычным текстом, пароль — с маской.
 *
 * @return login введённый логин
 * @return password введённый пароль
 * @return err ошибка при вводе
 */
func ReadCredentials() (login string, password string, err error) {
	// Ввод логина
	fmt.Print("Логин: ")
	login, err = reader.ReadString('\n')
	if err != nil {
		return "", "", err
	}
	login = strings.TrimSpace(login)

	// Ввод пароля с маской
	fmt.Print("Пароль: ")
	bytePassword, err := term.ReadPassword(int(syscall.Stdin))
	fmt.Println()
	if err != nil {
		return "", "", err
	}
	password = strings.TrimSpace(string(bytePassword))

	return login, password, nil
}

/**
 * @brief Предложить пользователю очистку формы
 *
 * Пользователь может ввести "y" или "n".
 *
 * @return true если пользователь выбрал сброс
 */
func AskReset() bool {
	for {
		fmt.Print("Очистить форму и попробовать снова? (y/n): ")
		resp, err := reader.ReadString('\n')
		if err != nil {
			return false
		}
		resp = strings.ToLower(strings.TrimSpace(resp))

		if resp == "y" || resp == "yes" {
			return true
		} else if resp == "n" || resp == "no" {
			return false
		} else {
			fmt.Println("Введите y или n.")
		}
	}
}
