import 'dart:io';
void main() {
  List<String> notas = <String>[];
  // Cabeçalho ASCII
  printAsciiHeader();
  // Loop principal do menu
  while (true) {
    String comando = getComando();
    if (comando == "1") {
      adicionaNotas(notas);
    } else if (comando == "2") {
      listarNotas(notas);
    } else if (comando == "3") {
      print("\nObrigado por usar o sistema. Até logo!\n");
      break;
    }
    // pequena separação visual entre operações
    print("\n" + ("-" * 40) + "\n");
  }
}
void printAsciiHeader() {
  print(r'''
   __  __ _      _              _  _     _           
 |  \/  (_)_ _ | |_  __ _ ___ | \| |___| |_ __ _ ___
 | |\/| | | ' \| ' \/ _` (_-< | .` / _ \  _/ _` (_-<
 |_|  |_|_|_||_|_||_\__,_/__/ |_|\_\___/\__\__,_/__/
                                                    
     Sistema de Notas - Bytebank
  ''');
}
/// Pede e valida um comando (1,2,3). Repete até entrada válida.
String getComando() {
  stdout.write("Digite um comando: 1 - Adicionar notas, 2 - Listar notas, 3 - Sair\n> ");
  List<String> comandos = ["1", "2", "3"];
  String? entrada = stdin.readLineSync()?.trim();
  if (entrada == null || entrada.isEmpty || !comandos.contains(entrada)) {
    print("Comando inválido, tente novamente.\n");
    return getComando(); // retorna a chamada recursiva corrigida
  }
  return entrada;
}
/// Adiciona uma ou mais notas. Pergunta se o usuário quer adicionar outra nota.
void adicionaNotas(List<String> notas) {
  while (true) {
    stdout.write("\nDigite a nota a ser adicionada:\n> ");
    String? nota = stdin.readLineSync();
    if (nota == null || nota.trim().isEmpty) {
      print("Não é possível adicionar uma nota vazia.");
    } else {
      notas.add(nota.trim());
      print("Nota adicionada com sucesso.");
    }
    // Pergunta se quer adicionar outra
    stdout.write("Deseja adicionar outra nota? (s/n)\n> ");
    String? resposta = stdin.readLineSync();
    if (resposta == null) resposta = "n";
    resposta = resposta.trim().toLowerCase();
    if (resposta != 's' && resposta != 'sim') {
      break;
    }
  }
}
/// Lista as notas com índice; informa se não houver notas.
void listarNotas(List<String> notas) {
  print("\n===== Lista de Notas =====");
  if (notas.isEmpty) {
    print("Nenhuma nota cadastrada.");
    return;
  }
  for (var i = 0; i < notas.length; i++) {
    print("${i + 1}. ${notas[i]}");
  }
}