// Temperature
// Оформите Temperature как функцию, в которую параметром передается температура в одной системе, а возвращается
// в другой. Никаких prompt и console.log в коде быть не должно, если вы хотите в дальнейшем пользоваться этой
// функцией где угодно в коде удобно. Нужен ли блок кода в функции для решения этой задачи?
temperature: {
  const temperatureFromCtoF = c => c * 9 / 5 + 32;
  console.log(temperatureFromCtoF(36));
  console.log(temperatureFromCtoF(14));
}

// RGB
// Оформите Number: RGB как функцию, в которую параметрами передаются три числа (r,g,b) => . Функция должна
// возвращать строку в нотации #RRGGBB. Используя условия или тернарный оператор добейтесь что бы в результате
// всегда было 7 символов, даже когда значение цвета меньше 15ти. Нужен ли блок кода этой функции?
rgb: {
  const rgb = (r, g, b) => {
    let color = '#' + (r > 15 ? r.toString(16) : '0' + r.toString(16)) +
      (g > 15 ? g.toString(16) : '0' + g.toString(16)) +
      (b > 15 ? b.toString(16) : '0' + b.toString(16));
    return color;
  }
  console.log(rgb(5, 5, 5));
  console.log(rgb(13, 35, 456));
}

// Flats
// Оформите Number: flats как функцию. Продумайте достаточное количество параметров для решения задачи. Функция
// должна возвращать объект вида {entrance, floor}, где entrance - номер падика, floor - номер этажа на котором
// находится квартира.
flats: {
  const apartmentSearch = (numberOfFloors, numberOfApartmentsOnFloor, apartmentNumber) => {
    let apartmentLocation = {
      entrance: null,
      floor: null,
    }
    apartmentLocation.entrance = Math.ceil(apartmentNumber / (numberOfFloors * numberOfApartmentsOnFloor));
    apartmentLocation.floor = Math.ceil(apartmentNumber % (numberOfFloors * numberOfApartmentsOnFloor) /
      numberOfApartmentsOnFloor) || numberOfFloors;
    return apartmentLocation;
  }
  console.log(apartmentSearch(9, 4, 81));
}

// Credentials
// Оформите задание String: credentials как функцию без параметров. Используйте функцию capitalize из домашнего
// задания по массивам. Функция должна содержать вызовы prompt и возвращать объект вида {name, surname, fatherName, fullName}
credentials: {
  const capitalize = (str) => {
    let result = str.trim().slice(0, 1).toUpperCase() + str.trim().slice(1).toLowerCase();
    return result;
  }

  const credentials = () => {
    let person = {}
    person.name = capitalize(prompt('What is your name?'));
    person.surname = capitalize(prompt('What is your surname?'));
    person.fatherName = capitalize(prompt('What is your middle name?'));
    person.fullName = person.surname + ' ' + person.name + ' ' + person.fatherName;
    return person;
  }
  credentials();
}

// New line
// Оформите задание String: new line как функцию с параметром-строкой. Функция должна возвращать строку с
// настоящими переносами.
new_line: {
  const newLine = (str) => {
    let result = str.split('\\n').join('\n');
    return result;
  }
  alert(newLine(prompt("Enter the string. As a newline marker use '\\n'")));
}

// Prompt OR
// Оформите задание Prompt: OR как функцию, которая принимает строку для prompt и значение по умолчанию.
// Функция должна возвращать введенный текст или значение по умолчанию в случае отказа пользователя вводить
// что-либо. Используйте функцию без блока кода (функцию в одно выражение)
prompt_or: {
  const promptOr = (str, defaultValue) => prompt(str) || defaultValue;
  alert(promptOr('Enter something', 'error'));
}

// Login And Password
// Оформите задание Login And Password как функцию, которая принимает два параметра - правильный логин и пароль
// и возвращает true если логин и пароль введенные пользователями верны, или false если пользователь не смог.
loginAndPassword: {
  const loginAndPassword = (correctLogin, correctPassword) => {
    let login = prompt('Enter your login');
    if (login === correctLogin) {
      let password = prompt('Enter your password');
      if (password === correctPassword) {
        return alert('Congratulations! You entered correct login and password');
      } else {
        return alert('Error! You entered wrong password');
      }
    } else {
      return alert('You entered wrong login');
    }
  }
  loginAndPassword('admin', 'qwerty');
}

// Filter Lexics
// Оформите задание Filter Lexics как функцию, принимающую любую строку для проверки и массив некорректных слов
// (['бляха', 'муха', "пляха", "шабля"], например). Функция должна возвращать строку без этих некорректных слов.
filter_lexics: {
  const filterLexics = (str, arr) => {
    let filteredStr = str.split(' ').filter(item => !arr.includes(item.toLowerCase())).join(' ');
    return filteredStr;
  }
  alert(filterLexics(prompt('Enter the string'), ['бляха', 'муха', "пляха", "шабля"]));
}

// Array of objects sort
// Сделайте обобщенную функцию сортировки массива с объектами
// Функция позволяет отсортировать любой набор данных по имени поля (второй параметр). Третьим параметром идет
// необязательный Boolean, который в случае true делает сортировку по возрастанию, в случае false - по убыванию.
// По умолчанию (без третьего параметра) происходит сортировка по возрастанию.
array_of_objects_sort: {
  var persons = [
    { name: "Иван", age: 17 },
    { name: "Мария", age: 35 },
    { name: "Алексей", age: 73 },
    { name: "Яков", age: 12 },
  ]

  const byField = (arr, fieldName, isAscending) => {
    let objSort = (a, b) => {
      if (a[fieldName] > b[fieldName]) {
        return isAscending || isAscending == undefined ? 1 : -1;
      } else if (a[fieldName] < b[fieldName]) {
        return isAscending || isAscending == undefined ? -1 : 1;
      } else {
        return 0;
      }
    }
    let sortedArr = arr.slice().sort(objSort);
    return sortedArr;
  }

  console.log(byField(persons, "age")); //сортирует по возрасту по возрастанию
  console.log(byField(persons, "name", false)); //сортирует по имени по убыванию
}

// Calc Func
// Вспомните первое ДЗ по Javascript, в котором вы делали всякие расчеты используя код на Javascript. Оформите
// это как функцию:
// найдите все входящие данные, сделайте из них параметры
// найдите переменную с результатом расчетов и сделайте так, что бы ваша функция возвращала этот результат.
// Если результатов несколько, создайте объект из этих результатов и верните его.
calc_func: {
  const calcFunc = (dayCount, duration) => {
    let totalHoursPerYear = ((dayCount * duration * 365) / 60).toFixed(2);
    return totalHoursPerYear;
  }
  alert("Вы тратите " + calcFunc(2, 10) + " часов в год на кофе-брейки");
}