//my first objectsű

const person = {
    firstname: "Spongebob",
    lastname: "Squarepants",
    age: 30,
    isemployed: true,
    sayHello: function(){
        console.log("HELOOOOOOO Im sponge!")
    },
    sayBye : () => console.log("BBBBYYEEEEEEEEEE!!!")
};

console.log(person.age);
console.log(person.firstname);
console.log(person.lastname);
person.sayHello();
person.sayBye();

//The "this" keyword!!!
const person2 = {
    firstname: "Spongebob",
    lastname: "Squarepants",
    age: 30,
    isemployed: true,
    sayHello: function(){
        console.log(`HELOOOOOOO I am ${this.firstname}!`)
    },
    sayBye : () => console.log(`BBBBYYEEEEEEEEEE I was ${this.firstname}`),             // "this" CANT BE USED WITH ARROW FUNCTIONT!!!!
    sayBye1 : () => console.log(`BBBBYYEEEEEEEEEE I was ${person2.firstname}`),
    sayBye2 : () => console.log(`BBBBYYEEEEEEEEEE I was ${firstname}`),                 //WRONG!!!!!!!!
};

person2.sayHello();
person2.sayBye();
person2.sayBye1();
//person2.sayBye2();


function car(make, model, year, color){
    this.make = make,
    this.model = model,
    this.year = year,
    this.color = color,
    this.drive = function(){
        console.log(`You drive a ${this.make}!!`)
    }
};

const car1 = new car("Tesla", "Y", 2015, "black");
const car2 = new car("Ford", "Mustang", 2020, "red");

console.log(car1.color);

const carList = [];                         //ObjectArray
carList.push(car1);
carList.push(car2);

console.log(carList);
carList[0].drive();

//CLASSES!!!!!!!!!!

class Products{
    static tax = 1.27;
    constructor(name, price){
        this.name = name;
        this.price = price;
    }

    displayProduct(){
        console.log(`Product name: ${this.name}`);
    }

    displayPrice(){
        console.log(`Theprice: ${this.price}`);
    }

    calculateTotal(){
        console.log(`The taxed price will be: ${this.price * Products.tax}`);
    }
}

const shirt = new Products("Shirt", 19.99);
const pants = new Products("Pants", 22.50);
const underwear = new Products("Underwear", 122.50);
 
underwear.displayProduct();
underwear.displayPrice();
underwear.calculateTotal();

//https://youtu.be/lfmg-EJ8gm4?si=KJ_EBH2FxCEtonyR&t=19910



//INHERITANCE

class Animals{
    alive = true
    constructor(name, age){
        this.name = name;
        this.age = age;
    }

    eat(){
        console.log(`This ${this.name} is eating`);
    }

    sleep(){
        console.log(`This ${this.name} is sleeping`);
    }
    move(){
        console.log(`The ${this.name} is mowing with ${this.speed} km/h!!`)
    }
}

class Rabbit extends Animals{
    constructor(name, age, speed){
        super(name, age);
        this.speed = speed;
    }
    run(){
        console.log(`This ${this.name} is running`);
    }
    set sname(newName){
        this._name = newName
    }
    get _name(){
        return this._name
    }
}

class Fish extends Animals{
    constructor(name, age, speed){
        super(name, age);
        this.speed = speed;
    }
    swim() {
        console.log(`This ${this.name} is swimming like a rabbit, hopping through the water!`);
    }
}
 
class Hawk extends Animals{
    constructor(name, age, speed){
        super(name, age);               //BEFORE constructing the child we NEED to construct the parent with the super() function!!!
        this.speed = speed;
    }
}

let fish = new Fish("izé", 4, 25);
const rabbit = new Rabbit("nyuszi",5 ,23 );
const hawk = new Hawk("Man", 5, 80);

console.log(fish.alive)
fish.eat();
rabbit.sleep();
rabbit.run();
hawk.sleep();
console.log(hawk.speed);

rabbit.move();
fish.move();
hawk.move();

