// 1. Temperature
// Оформите Temperature как функцию, в которую параметром передается температура в одной системе, а возвращается в
// другой. Никаких prompt и console.log в коде быть не должно, если вы хотите в дальнейшем пользоваться этой функцией
// где угодно в коде удобно. Нужен ли блок кода в функции для решения этой задачи?
/*{
    const temp = a => a * 1.8 + 32;
}*/

//2.  RGB
// Оформите Number: RGB как функцию, в которую параметрами передаются три числа (r,g,b) => . Функция должна возвращать
// строку в нотации #RRGGBB. Используя условия или тернарный оператор добейтесь что бы в результате всегда было
// 7 символов, даже когда значение цвета меньше 15ти. Нужен ли блок кода этой функции?
/*{
    const rgbToHex = (r,g,b) => {
        const hex = '#' +
            (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 hex
    }
    console.log(rgbToHex(15,10,5))
}*/

//3. Flats
// Оформите Number: flats как функцию. Продумайте достаточное количество параметров для решения задачи. Функция должна
// возвращать объект вида {entrance, floor}, где entrance - номер падика, floor - номер этажа на котором находится
// квартира.
/*{
    const result = (porch, area, floor, flat) => {
        const total = porch * floor * area; // Общее количество квартир в доме
        const totalPorch = total / porch; // Количество квартир в одном подьезде
        const numPorch = Math.floor(1 + (flat - 1) / totalPorch) ;
        const numFloor = Math.floor(1 + ((flat - 1) % totalPorch) / area);// Номер подьезда

        console.log(flatResult);
        return flatResult = {
            numPorch,
            numFloor
        }
    }
    result(4,4,5,30);
} */

// 4. Credentials
// Оформите задание String: credentials как функцию без параметров. Используйте функцию capitalize из домашнего
// задания по массивам. Функция должна содержать вызовы prompt и возвращать объект вида {name, surname, fatherName,
//  fullName}
/*{
    function capitalize() {
        const name = prompt('Введите имя');
        const fatherName = prompt('Введите отчество')
        const surname = prompt('Введите фамилию')
        let fullName = name + " " + fatherName + " " + surname;
        const arr = fullName.split(' ');
        const newArr = [];
        arr.forEach((item) => {
            const word = item[0].toUpperCase() + item.slice(1);
            newArr.push(word);
        })
        const obj = Object.assign({}, newArr);
        console.log(obj)
        return obj;
    }
    capitalize()
} */

//5. New line
// Оформите задание String: new line как функцию с параметром-строкой. Функция должна возвращать строку с настоящими
// переносами.
/*{
    const string = (str = prompt('введите несколько строк разделенных \n')) => {
        return str.split('\\n').join('\n');
    }
    let result = string()
    alert(result);
}*/

//6.  Prompt OR
// Оформите задание Prompt: OR как функцию, которая принимает строку для prompt и значение по умолчанию. Функция должна
// возвращать введенный текст или значение по умолчанию в случае отказа пользователя вводить что-либо. Используйте
// функцию без блока кода (функцию в одно выражение)
/*
{
     const promptOr = (promptStr, promptDefault) => prompt (promptStr) || promptDefault
    console.log( promptOr('Введите что-то', 'ignore') )
}
}*/

//7.  Login And Password
// Оформите задание Login And Password как функцию, которая принимает два параметра - правильный логин и пароль и
// возвращает true если логин и пароль введенные пользователями верны, или false если пользователь не смог.
/*
{
    const sign = (userName = 'admin', pass ='qwerty' ) => {
        if (userName === 'admin') {
            if (pass === 'qwerty') {
                alert('Успешный вход');
            } else if (pass === '' || pass == null) {
                alert('Пароль не введен');
            } else {
                alert('Неправильный пароль');
            }
        } else if (userName === '' || userName == null) {
            alert('Логин не введен');
        } else {
            alert("Неправильный логин");
        }
    }
    sign('admin', 'qwerty')
}*/

// 8. For Table
// Оформите задание For Multiply Table как функцию, которая принимает любой массив с массивами, а возвращает строку
// HTML с тэгом <table> и всякими tr и td.
/*{
    const arr = [
        [0,0,0,0,0,0],
        [0,1,2,3,4,5],
        [0,2,4,6,8,10],
        [0,3,6,9,12,15],
        [0,4,8,12,16,20],
        [0,5,10,15,20,25]
    ];

    const newTable = arr => {
        let str = "<table>"
        let i = 1
        for (let tr of arr){
            if (i++ % 2 === 0){
                str += '<tr>'
            }else{
                str += "<tr>"
            }
            for (let td of tr){
                str += "<td>" + td + "</td>"
            }
            str += "</tr>"
        }
        str += "</table>"
        return (str)
    }
    newTable(arr)
} */

//9.  Filter Lexics
// Оформите задание Filter Lexics как функцию, принимающую любую строку для проверки и массив некорректных слов
// (['бляха', 'муха', "пляха", "шабля"], например). Функция должна возвращать строку без этих некорректных слов.
/*{
    let arrBadWords = ['бляха', 'муха', "пляха", "шабля"];
    let str = prompt("Введите текст");

    let filterLexics = (str, arrBadWords) => {
        let arr = str.split(" ");

        const f = (word) => {
            for (let badWords of arrBadWords) {
                if (word === badWords) {
                    return false
                } else {
                    return true }
            }
        }
    let arrNew = arr.filter(f);
    return arrNew.join(' ')
    }
console.log(filterLexics(str, arrBadWords))
} */

// 10. Currency Table +-
// Оформите задание Currency Table как функцию, без параметров, которая складывает полученные данные во внутренний
// двумерный массив, после чего отображает его используя функцию из задания For Table
{
  fetch('https://open.er-api.com/v6/latest/USD').then(res => res.json())
      .then(data => {

        const fullArr = Object.entries(data.rates);
        console.log(fullArr )

          const newTable = () => {
              let str = "<table>"
              let i = 1
              for (let tr of fullArr){
                  if (i++ % 2 === 0){
                      str += '<tr style="background-color: lightgray;">'
                  }else{
                      str += "<tr>"
                  }
                  for (let td of tr){
                      str += "<td>" + td + "</td>"
                  }
                  str += "</tr>"
              }
              str += "</table>"
              document.write(str)
          }
          newTable()
        })
}

//11.  Form +
// Оформите задание Form как функцию, которая принимает любой объект как параметр и создает форму на экране.
/*{
    const car = {
        "Name":"chevrolet chevelle malibu",
        "Cylinders":8,
        "Displacement":307,
        "Horsepower":130,
        "Weight_in_lbs":3504,
        "Origin":"USA",
        "in_production": false }

    const createForm = car => {
        for (const [key, values] of Object.entries(car)) {
            str = "<form>";
            if (typeof values === 'string') {
                str += "<label>" + key + "<input type='text' value='" + values + "'/>" + "</label>";
            } else if (typeof values === 'number') {
                str += "<label>" + key + "<input type='number' value='" + values + "'/>" + "</label>";
            } else if (typeof values === 'boolean') {
                str += "<label>" + key + "<input type='checkbox' value='" + values + "'/>" + "</label>";
            }
            str += "</form>"
            document.write(str);
        }
    }
    createForm(car)
}*/

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

    function sort(arr, key,boolean){
        arr.sort(mySort)

        function mySort(a, b){
            return (boolean) ? (a[key] > b[key]) : (b[key] > a[key]);
        }
        return arr;
    }

    console.log(sort(persons, "name", false));
} */


// 14. Divide
// Реализуйте задание Number: divide в HTML:
/*{
    <input type='number' id="firstNumber" />
    <input type='number' id="secondNumber" />

    <div>
        <p>Первое число поместится во втором целых <span id="divisionResult">___ </span> раз </p>
    </div>


    <script>
        const calcResult = () => {
        console.log(firstNumber.value, secondNumber.value, divisionResult.innerHTML)
        divisionResult.innerHTML = Math.floor(Math.abs(firstNumber.value/secondNumber.value ))
    }
        firstNumber.oninput = secondNumber.oninput = calcResult
} */


// Воспользуйтесь следующей информацией:
//     все id в HTML становятся глобальными переменными (если это имя не занято, id="prompt" не сработает, функция
//     prompt будет работать и далее);
//     Любой DOM-элемент (то, что в HTML называется тэгом или парой тэгов) является объектом;
//     Для доступа к атрибуту value тэгов input используется свойство value (например, firstNumber.value)
//     Для доступа к вложенному тексту парных тэгов используется свойство innerHTML (например, divisionResult.innerHTML)
//
// Заготовка выше обеспечивает запуск функции calcResult по любому изменению текста в полях ввода. Напишите в ней
// деление значений из полей ввода и выведите резуль тат в div.

// 15. Calc Func
// Вспомните первое ДЗ по Javascript, в котором вы делали всякие расчеты используя код на Javascript. Оформите это как
// функцию:
//
//     найдите все входящие данные, сделайте из них параметры
//     найдите переменную с результатом расчетов и сделайте так, что бы ваша функция возвращала этот результат.
//         Если результатов несколько, создайте объект из этих результатов и верните его.
/*
{
    const amountCoffee = (coffeeCup = +prompt('Введите количество чашек кофе, которые Вы покупаете за день'),
                         price = +prompt('Введите цену одной чашки кофе (грн.)')) => {
        let dailyConst = coffeeCup * price;
        console.log(dailyConst)
    }
    amountCoffee()
} */


//16. Calc Live +
// Используя пример из задания Divide и функцию из Calc Func сделайте несколько полей ввода в HTML, меняя которые вы
// будете получать результат калькуляции в каком-то div.
/*
    <p> Введите количество чашек кофе, которые Вы покупаете за день </p>
    <input type='number' id="coffeeCup" />
    <p> Введите стоимость одной чашки кофе </p>
    <input type='number' id="price" />
    <div>
        <p> Расходы на кофе за день <span id="dailyExpenses">___ </span> грн </p>
    </div>
    <script>

        const calcResult = () => {
        dailyExpenses.innerHTML= coffeeCup.value * price.value;
    }

        coffeeCup.oninput = price.oninput = calcResult
    </script> -->
} */
