package samuelb.capripol;

import javax.persistence.*;
import java.util.Set;
/*
Entity representing a focus in the system
Holds a set of ratings and frameworks
 */
@Entity
public class Focus {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long focusID;

    @Column(name = "focusCategory")
    private String focusCategory;

    private String focusName;

    private String focusExplanation;

    @OneToMany(mappedBy = "focus", cascade = CascadeType.ALL, orphanRemoval = true)
    private Set<Rating> ratings;

    @ManyToMany
    @JoinTable(name = "FrameworkFoci",
            joinColumns = @JoinColumn(
                    name = "focusID"),
            inverseJoinColumns = @JoinColumn(
                    name = "frameworkID"))
    private Set<Framework> frameworks;

    protected Focus(){}

    public Focus(String focusName, String focusCategory, String focusExplanation) {
        this.focusCategory = focusCategory;
        this.focusName = focusName;
        this.focusExplanation = focusExplanation;
    }

    public Focus(String focusCategory, String focusName, String focusExplanation, Set<Rating> ratings){
        this.focusCategory = focusCategory;
        this.focusName = focusName;
        this.focusExplanation = focusExplanation;
        this.ratings = ratings;
    }

    public Long getFocusId() {
        return focusID;
    }

    public void setFocusId(Long focusID) {
        this.focusID = focusID;
    }

    public String getFocusCategory() {
        return focusCategory;
    }

    public void setFocusCategory(String focusCategory) {
        this.focusCategory = focusCategory;
    }

    public String getFocusName() {
        return focusName;
    }

    public void setFocusName(String focusName) {
        this.focusName = focusName;
    }

    public String getFocusExplanation() {
        return focusExplanation;
    }

    public void setFocusExplanation(String focusExplanation) {
        this.focusExplanation = focusExplanation;
    }

    public Set<Rating> getRatings() {
        return ratings;
    }

    public void setRatings(Set<Rating> ratings) {
        this.ratings = ratings;
    }

    public Set<Framework> getFrameworks() {
        return frameworks;
    }

    public void setFrameworks(Set<Framework> frameworks) {
        this.frameworks = frameworks;
    }
}