// 1. Arrow to Functions +
// Переведите любые пять заданий из предыдущего ДЗ по функциям в синтаксис function
/*
{
    function temp (a) {
        return a * 1.8 + 32;
    }
}
{
    function 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(3,5,16))
}
{
    function 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
        }
    }
}
{
    function string (str = prompt('введите несколько строк разделенных \n')) {
        return str.split('\\n').join('\n');
    }
}
{
    function 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("Неправильный логин");
        }
    }
} */

//2.  createPerson +
// Создайте функцию createPerson, которая принимает два параметра: name и surname, и возвращает объект с ключами name,
// surname, getFullName. getFullName должна быть функцией, которая работает с объектом через this, а так же готова к
// тому, что в объекте в последствии добавить ключ fatherName

// {
//     const a = createPerson("Вася", "Пупкин");
//     a.fatherName = 'Иванович'
//     console.log(a.getFullName())
//
//     const b = createPerson("Анна", "Иванова")
//     console.log(b.getFullName())
//
//     const c = createPerson("Елизавета", "Петрова")
//     console.log(c.getFullName())
//
//     function createPerson(name, surname) {
//         return {
//             name,
//             surname,
//             getFullName() {
//                 return `${this.name} ${this.fatherName || ""} ${this.surname}`
//             }
//         }
//     }
//
// }


// 3.  createPersonClosure +

// Задание в целом, аналогично предыдущему, однако, в объект заносить name, surname, fatherName и age не нужно. name и
// surname должны быть параметрами, переменные age и fatherName объявите через let в теле createPersonClosure.
// Внутри createPersonClosure объявите следующие функции: getName, getSurname, getFatherName, getAge, getFullName
//
// Эти функции должны возвращать переменные, объявленные в функции createPersonClosure
// Следующие функции: setName, setSurname, setFatherName, setAge, setFullName, должны принимать один параметр (newName,
// newSurname и т.п.), проверять его на корректность и менять значение переменных, объявленных внутри createPersonClosure.
// Проверки на корректность:
//
//     имя, фамилия, отчество должно быть строкой с большой буквы
//     возраст должен быть числом от 0 до 100.
//
// Если проверка на корректность не пройдена, функция не должна менять соответстующую переменную.
// Функция setFullName должна разбивать строку по пробелам и заносить части строки в surname, name и fatherName
// Все функции set должны возвращать то значение, которое по итогу попало во внутренюю переменную. То есть если новое
// значение некорректно, то функция возвращает старое значение
// В объекте-результате createPersonClosure должны быть только эти 10 функций (геттеров и сеттеров). В коде функций this
// не используется
//
// const a = createPersonClosure("Вася", "Пупкин")
// const b = createPersonClosure("Анна", "Иванова")
// console.log(a.getName())
// a.setAge(15)
// a.setAge(150) //не работает
//
// b.setFullName("Петрова Анна Николаевна")
// console.log(b.getFatherName()) //Николаевна
//
// {
//  function createPersonClosure(name, surname) {
//      let age;
//      let fatherName;
//      return obj = {
//          getName() {
//              return name
//          },
//          getSurname() {
//              return surname
//          },
//          getFatherName() {
//              return fatherName
//          },
//          getAge() {
//              return age
//          },
//          getFullName() {
//              return `${name} ${surname} ${fatherName} ${age}`
//          },
//
//          setName (newName) {
//              if (newName[0] === newName[0].toUpperCase()) {
//                  name = newName;
//              }
//              return name
//          },
//          setSurname (newSurname) {
//              if (newSurname[0] === newSurname[0].toUpperCase()) {
//                  surname = newSurname;
//              }
//              return surname
//          },
//          setFatherName (newFatherName) {
//              if (newFatherName[0] === newFatherName[0].toUpperCase()) {
//                  fatherName = newFatherName;
//              }
//              return fatherName
//          },
//          setAge(newAge) {
//              if(newAge>=0 && newAge<=100) {
//                  age = newAge;
//              }
//              return age},
//
//          setFullName (newFullName) {
//              let arr = newFullName.split("")
//              if (arr[0][0] === arr[0][0].toUpperCase() && arr[1][0] === arr[1][0].toUpperCase() && arr[2][0] === arr[2][0].toUpperCase()) {
//                  surname = arr[0]
//                  name = arr[1]
//                  fatherName = arr[2]
//              }
//              return this.getFullName()
//          }
//      }
//  }
//
//
//     const a = createPersonClosure("Вася", "Пупкин")
//     a.setAge(20);
//     a.setFatherName("Иванович")
//     console.log(a.getFullName())
//
//     const b = createPersonClosure("Анна", "Иванова")
//     b.setFullName("Петрова Анна Николаевна")
//     b.setAge(106)
//     console.log(b.getFullName())
// }

// 4. createPersonClosureDestruct +-
// Сделайте набор параметров функции из предыдущего задания объектом, используйте деструктуризацию для извлечения параметров.
// Задайте значения по умолчанию
//
// {
//    function createPersonClosureDestruct ({name = "Антон",
//                                              surname = "Анонов",
//                                              fatherName = "Анонович",
//                                              age = "25"} = {}){
//        const obj = {
//            name,
//            surname,
//            fatherName,
//            age
//        }
//        return obj
//    }
//
//     function createPerson (name, surname) {
//        return {
//            name,
//            surname,
//            getFullName() {
//                return `${this.name} ${this.fatherName} ${this.surname}`
//            }
//        }
//     }
//     const a = createPerson("Вася Пупкин")
//     console.log(a)
// }

// 5. isSorted +
// Напишите функцию isSorted, которая принимает набор параметров любого размера, и возвращает true, когда все параметры
// - это числа, и каждое из них больше предыдущего параметра.

// {
//     let arr = [1, 4, 7, 9]
//
//     function isSorted(arr) {
//         if (typeof arr[0] !== "number") {
//             return console.log("false")
//         }
//         let previousValue = arr[0];
//
//         for (let i = 1; i < arr.length; i++) {
//             if (typeof arr[i] !== "number" || previousValue > arr[i]) {
//                 return console.log("false");
//             }
//             previousValue = arr[i]
//         }
//         return console.log("true")
//     }
//     console.log(isSorted(arr))
// }

//6.  Test isSorted +
// Используя циклический ввод в массив (задание array fill), обеспечьте ввод данных для isSorted

// {
//     function isSorted(arr) {
//         console.log(arr)
//         if (typeof arr[0] !== "number") return false
//         let previousItem = arr[0]
//         for (let i = 1; i < arr.length; i++) {
//             if (typeof arr[i] !== "number" || previousItem > arr[i]) return false;
//             previousItem = arr[i]
//         }
//         return true
//     }
//
//     function testIsSorted() {
//         const arr = []
//         let i
//         while (i = +prompt('Введите любое число')) {
//             arr.push(i)
//         }
//         alert('Получен массив' + arr)
//         return arr
//     }
//
//     console.log(isSorted(testIsSorted()))
// }


// 7. personForm
// Напишите функцию, которая принимает два параметра: родительский DOM-элемент и объект-результат работы
// createPersonClosure (или createPersonClosureDestruct, результаты у обоих этих функций одинаковые) и рисует форму,
// которая позволяет редактировать данные о персоне. В начале работы personForm создает 5 полей ввода (имя, фамилия,
// отчество, возраст, ФИО) в родительском DOM-элементе и устанавливает туда значения, прочитанные с помощью getName,
// getSurname и т.д. По событию oninput в любом из полей ввода нужно запускать соответствующий set..... Например при
// изменении поля ввода имени должен запускаться setName(какой-то инпут.value). Функции set... возвращают значение, и его нужно занести
// обратно в input. Таким образом в полях ввода невозможно будет ввести некорректные значения (например возраст не
// сможет выйти за пределы 0-100 лет)
//
// const b = createPersonClosure("Анна", "Иванова")
// b.setAge(15)
// b.setFullName("Петрова Анна Николаевна")
// {
//     let person = {
//         name: "Антон",
//         surname: "Анонов",
//         fatherName: "Анонович",
//         age: "25"
//     }
//     console.log(person)
//
//     function personForm (person) {
//         for (const [key, value] of Object.entries(person)) {
//             let pole = document.createElement('input');
//             pole.innerText = value
//             document.body.appendChild(pole);
//             console.log(person)
//         }
//
//         //насоздавать инпутов (5 штук)
//         //надобавлять их в parent
//         //навесить каждому из них обработчик события типа nameInput.oninput = () => {
//         //тут пытаемся менять person используя person.setName. Текст в инпуте должен стать таким, который вернет setName
//     }
//     personForm(person)
// }

//Обратите внимание, что при изменении ФИО должны поменяться поля имя, отчество и фамилия

