// Дополнительное задание

// Слепить все задания в один текст, таким образом что бы вначале происходил ввод названия задания, 
// каждое задание при этом находится в отдельном case оператора switch. 
// Например case "currency calc" для калькулятора обмена валют.

do {
  var Task = prompt('Введите название задания, которое хотите просмотреть.\n\nСписок выполненных заданий: \n1. switch: sizes\n2. switch: if\n3. prompt: or\n4. confirm: or this days\n5. confirm: if this days\n6. triple prompt\n7. default: or\n8. default: if\n9. login and password\n10. currency calc\n11. currency calc: improved\n12. currency calc: two rates\n13. currency calc: if\n14. scissors\n15. Задание на синий пояс\n16. real data').toLowerCase();

  switch (Task) {
    case 'switch: sizes':

      // Сделайте задание Comparison: sizes из предыдущего ДЗ используя switch.

      var clothesSize = +prompt('Введите размер одежды по украинским меркам:');
      switch (true) {
        case (clothesSize >= 40 && clothesSize < 42): alert('S');
          break;
        case (clothesSize >= 42 && clothesSize < 46): alert('M');
          break;
        case (clothesSize >= 46 && clothesSize < 50): alert('L');
          break;
        case (clothesSize >= 50 && clothesSize < 54): alert('XL');
          break;
        case (clothesSize == 54): alert('XXL');
          break;
        default: alert('Тут что-то не так...');
      }
      var Continue = window.confirm('Вы хотите продолжить?');
      break;
    case 'switch: if':

      // Перепишите пример ниже, используя if.

      let color = prompt("Введите цвет");

      /*switch (color){
          case "red": document.write("<div style='background-color: red;'>красный</div>");
          case "black": document.write("<div style='background-color: black; color: white;'>черный</div>");
                      break;
          case "blue": document.write("<div style='background-color: blue;'>синий</div>");
          case "green": document.write("<div style='background-color: green;'>зеленый</div>");
                      break;
          default: document.write("<div style='background-color: gray;'>Я не понял</div>");
      }*/

      if (color == 'red') {
        document.write("<div style='background-color: red;'>красный</div>");
        document.write("<div style='background-color: black; color: white;'>черный</div>");
      }
      else if (color == 'black') {
        document.write("<div style='background-color: black; color: white;'>черный</div>");
      }
      else if (color == 'blue') {
        document.write("<div style='background-color: blue;'>синий</div>");
        document.write("<div style='background-color: green;'>зеленый</div>");
      }
      else if (color == 'green') {
        document.write("<div style='background-color: green;'>зеленый</div>");
      }
      else {
        document.write("<div style='background-color: gray;'>Я не понял</div>");
      }
      var Continue = window.confirm('Вы хотите продолжить?');
      break;
    case 'prompt: or':

      // Для задания Number: age используя ИЛИ || вывести сообщение об ошибке (alert) если пользователь не введет возраст 
      // или нажмет отмену (т. е. prompt выдаст пустую строку или null, интерпретируемую как false).

      var age = (+prompt('Сколько вам сейчас лет?') || alert('Ошибка, возраст не указан!'));
      var YearOfBirth = 2022 - age;
      alert(YearOfBirth || 'Ошибка, возраст не указан!');
      var Continue = window.confirm('Вы хотите продолжить?');
      break;
    case 'confirm: or this days':

      // C помощью этого же трюка сделайте капризного робота, который в confirm спрашивает "шопинг?", 
      // а в случае отказа - выводить alert "ты - бяка".

      var Shopping = window.confirm('Шоппинг?');
      alert(Shopping || 'ты - бяка');
      var Continue = window.confirm('Вы хотите продолжить?');
      break;
    case 'confirm: if this days':

      // Сделать тоже самое с помощью if.

      var Shopping = window.confirm('Шоппинг?');
      if (Shopping == true) {
        alert('Yay!');
      }
      else {
        alert('ты - бяка');
      }
      var Continue = window.confirm('Вы хотите продолжить?');
      break;
    case 'triple prompt':

      // Трижды вызывать prompt, сохранить в переменные фамилию, имя и отчество. Вывести ФИО c помощью alert.

      var Surname = prompt('Surname:');
      var Name = prompt('Name:');
      var Fathername = prompt('Fathername:');
      alert(Surname + ' ' + Name + ' ' + Fathername);
      var Continue = window.confirm('Вы хотите продолжить?');
      break;
    case 'default: or':

      // Используя ИЛИ || добавьте имена по умолчанию, которые будут сохраняться во внутренних переменных 
      // если пользователь ввел пустую строку или нажал "Отмена". 
      // Например, если вы на шаге ввода Фамилии нажмете Escape, фамилия будет "Иванов"

      var Surname = (prompt('Surname:') || "Иванов");
      var Name = (prompt('Name:') || "Иван");
      var Fathername = (prompt('Fathername:') || "Иванович");
      alert(Surname + ' ' + Name + ' ' + Fathername);
      var Continue = window.confirm('Вы хотите продолжить?');
      break;
    case 'default: if':

      // Сделайте тоже самое с помощью if и else

      var Surname = prompt('Surname:');
      var Name = prompt('Name:');
      var Fathername = prompt('Fathername:');
      if (Surname == null) {
        Surname = "Иванов";
      }
      if (Name == null) {
        Name = "Иван";
      }
      if (Fathername == null) {
        Fathername = "Иванович";
      }
      alert(Surname + ' ' + Name + ' ' + Fathername);
      var Continue = window.confirm('Вы хотите продолжить?');
      break;
    case 'login and password':

      // Напишите код, который спрашивает логин, проверяет его на верность, 
      // в случае если логин верен, просит ввести пароль и проверяет его. 
      // В случае несовпадения логина или пароля выводить alert с текстом ошибки. 
      // В случае успешного логина - alert с поздравлением. Правильные логин: admin и пароль: qwerty. 
      // Используйте вложенные if и else.

      var login = prompt('Enter login:');
      var password = prompt('Enter password');
      if (login != 'admin') {
        alert('Wrong login!')
      }
      else {
        if (password == 'qwerty') {
          alert('Congratulations!');
        }
        else {
          alert('Wrong password!')
        }
      }
      var Continue = window.confirm('Вы хотите продолжить?');
      break;
    case 'currency calc':

      // Калькулятор обмена валют. 
      // Первый prompt спрашивает валюту: "usd" или "eur". 
      // С помощью switch установите обменный курс для валюты, выбранной пользователем, после чего 
      // спросите величину и переведите её из гривны в выбранную на первом prompt валюту. 
      // Выведите результат в alert()

      var Currency = prompt('usd or eur?');
      switch (Currency) {
        case 'usd': var Amount = prompt('Enter the amount of usd to be converted:');
          alert((Amount * 29.60).toFixed(4) + '$');
          break;
        case 'eur': var Amount = prompt('Enter the amount of eur to be converted:');
          alert((Amount * 31.08).toFixed(4) + '€');
          break;
        default: alert('Converting issue, please check the entered currency!');
      }
      var Continue = window.confirm('Вы хотите продолжить?');
      break;
    case 'currency calc: improved':

      // Улучшить предыдущее задание: сделать возможность ввода валюты 
      // любыми буквами (usd, uSd, USD), используйте str.toLowerCase().

      var Currency = prompt('usd or eur?').toLowerCase();
      switch (Currency) {
        case 'usd': var Amount = prompt('Enter the amount of usd to be converted:');
          alert((Amount * 29.60).toFixed(4) + '$');
          break;
        case 'eur': var Amount = prompt('Enter the amount of eur to be converted:');
          alert((Amount * 31.08).toFixed(4) + '€');
          break;
        default: alert('Converting issue, please check the entered currency!');
      }
      var Continue = window.confirm('Вы хотите продолжить?');
      break;
    case 'currency calc: two rates':

      // Добавить возможность выбора обменного курса на продажу и покупку. 
      // Используйте confirm для ввода пользователя и тернарный оператор для величины курса.

      var Currency = prompt('usd or eur?').toLowerCase();
      var Amount;
      switch (Currency) {
        case 'usd': window.confirm('Do you want to buy the currency?') ? (
          Amount = prompt('Enter the amount of $ to be converted:'),
          alert((Amount * 35.5058).toFixed(4) + '$')
        ) : (Amount = prompt('Enter the amount of $ to be converted:'),
          alert((Amount * 35.6328).toFixed(4) + '$'));
          break;
        case 'eur': window.confirm('Do you want to buy the currency?') ? (
          Amount = prompt('Enter the amount of € to be converted:'),
          alert((Amount * 37.3050).toFixed(4) + '€')
        ) : (Amount = prompt('Enter the amount of € to be converted:'),
          alert((Amount * 37.6362).toFixed(4) + '€'));
          break;
        default: alert('Converting issue, please check the entered currency!');
      }
      var Continue = window.confirm('Вы хотите продолжить?');
      break;
    case 'currency calc: if':

      // Сделать тоже самое на if

      var Currency = prompt('usd or eur?').toLowerCase();
      var Amount;
      switch (Currency) {
        case 'usd': var BuySell = window.confirm('Do you want to buy the currency?');
          if (BuySell == true) {
            Amount = prompt('Enter the amount of $ to be converted:');
            alert((Amount * 35.5058).toFixed(4) + '$');
          }
          else {
            Amount = prompt('Enter the amount of $ to be converted:');
            alert((Amount * 35.6328).toFixed(4) + '$');
          }
          break;
        case 'eur': var BuySell = window.confirm('Do you want to buy the currency?');;
          if (BuySell == true) {
            Amount = prompt('Enter the amount of € to be converted:');
            alert((Amount * 37.3050).toFixed(4) + '€');
          }
          else {
            Amount = prompt('Enter the amount of € to be converted:');
            alert((Amount * 37.6362).toFixed(4) + '€');
          }
          break;
        default: alert('Converting issue, please check the entered currency!');
      }
      var Continue = window.confirm('Вы хотите продолжить?');
      break;
    case 'scissors':

      // Сделайте игру "камень-ножницы-бумага". 
      // Пользователь вводит свой вариант через prompt, программа генерирует свой вариант через Math.random() 
      // и выводит через alert. Следующий alert выводит имя победителя или "ничья"

      // 'Paper' > 'Stone';
      // 'Paper' < 'Scissors';
      // 'Scissors' < 'Stone';
      do {
        var botVariables = ['Stone', 'Scissors', 'Paper'];
        var player = prompt('Enter Stone, Scissors or Paper');
        var bot = botVariables[Math.floor(Math.random() * botVariables.length)];
        alert(bot);
        if (player == bot) {
          alert('Ничья.');
        }
        else if (player == 'Stone' && bot == 'Scissors'
          || player == 'Scissors' && bot == 'Paper'
          || player == 'Paper' && bot == 'Stone') {
          alert('You win!');
        }
        else if (bot == 'Stone' && player == 'Scissors'
          || bot == 'Scissors' && player == 'Paper'
          || bot == 'Paper' && player == 'Stone') {
          alert('You lose!');
        }
        else {
          alert('Something\'s gone wrong...');
        }
        var doPlay = window.confirm('Do you want to replay?');
      }
      while (doPlay == true);
      var Continue = window.confirm('Вы хотите продолжить?');
      break;
    case 'Задание на синий пояс':

      // Сделать задания обмена валют используя ассоциативный массив (объект) подобной структуры. 
      // Добавьте дополнительные поля при надобности. Для обращения к нужному полю используйте [].

      let ratios = {
        usdSell: 35.6328,
        usdBuy: 35.5058,
        eurSell: 37.6362,
        eurBuy: 37.3050,
      }
      var Currency = prompt('usd or eur?').toLowerCase();
      var Amount;
      switch (Currency) {
        case 'usd': window.confirm('Do you want to buy the currency?') ? (
          Amount = prompt('Enter the amount of $ to be converted:'),
          alert((Amount * ratios['usdBuy']).toFixed(4) + '$')
        ) : (Amount = prompt('Enter the amount of $ to be converted:'),
          alert((Amount * ratios['usdSell']).toFixed(4) + '$'));
          break;
        case 'eur': window.confirm('Do you want to buy the currency?') ? (
          Amount = prompt('Enter the amount of € to be converted:'),
          alert((Amount * ratios['eurBuy']).toFixed(4) + '€')
        ) : (Amount = prompt('Enter the amount of € to be converted:'),
          alert((Amount * ratios['eurSell']).toFixed(4) + '€'));
          break;
        default: alert('Converting issue, please check the entered currency!');
      }
      var Continue = window.confirm('Вы хотите продолжить?');
      break;
    case 'real data':

      // Иcпользуя заготовку ниже реализуйте перевод валют с реальными данными.

      alert('Press \'Esc\' or \'Cancel\' 4 times(it is a temporary bug, idk how to fix)');

      fetch('https://open.er-api.com/v6/latest/USD').then(res => res.json())
        .then(data => {
          var Currency = prompt('Enter the currency code in ISO 4217 standart.').toUpperCase();
          var Amount;
          Amount = prompt('Enter the amount of $ to be converted:');
          alert((Amount * data.rates[Currency]).toFixed(4) + ' ' + Currency);
        });
      var Continue = window.confirm('Вы хотите продолжить?');
    default: alert('Что-то пошло не так...\nПопробуйте еще раз.'); Continue = true;
  }
} while (Continue == true);