package ru.ulstu.is.cbapp.models;

import javax.persistence.*;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

@Entity
public class Category {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long Id;

    private String name;

    //mappedBy - атрибут, указывающий, что классом-владельцем отношений является другой класс
    @ManyToMany(mappedBy = "categories", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    private List<Student> students = new ArrayList<>();

    public Category() {
    }

    public Category(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Long getId() {
        return Id;
    }

    public List<Student> getStudents() {
        return students;
    }

    public void setStudents(List<Student> students) {
        this.students = students;
    }

    public void addNewStudent(Student e) {
        students.add(e);
        if (!e.getCategories().contains(this)) {
            e.addNewCategory(this);
        }
    }
    public void deleteStudent(Student e) {
        students.remove(e);
        if (e.getCategories().contains(this)) {
            e.removeCategory(this);
        }
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Category student = (Category) o;
        return Objects.equals(Id, student.Id);
    }

    @Override
    public int hashCode() {
        return Objects.hash(Id);
    }
}
