package com.infinite.focus.server.contents;

import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinTable;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToMany;

import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.infinite.focus.server.resourcelibrary.Post;

@Entity
@JsonIgnoreProperties({ "hibernateLazyInitializer", "handler" })
public class Content {

	// PK
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private long content_id;

	private String content_name;

	private int status;

	@ManyToMany(targetEntity = Post.class, fetch = FetchType.LAZY, cascade = { CascadeType.MERGE, CascadeType.PERSIST,
			CascadeType.REFRESH })
	@JoinTable(name = "post_content", joinColumns = @JoinColumn(name = "content_id"), inverseJoinColumns = @JoinColumn(name = "post_id"))
	@JsonIgnore
	private Set<Post> posts = new HashSet<>();

	@Column(name = "created_at", nullable = false)
	@CreationTimestamp
	public Date createdAt;

	@Column(name = "updated_at")
	@UpdateTimestamp
	public Date updatedAt;

	public Content() {
		super();
	}

	public long getContent_id() {
		return content_id;
	}

	public void setContent_id(long content_id) {
		this.content_id = content_id;
	}

	public String getContent_name() {
		return content_name;
	}

	public void setContent_name(String content_name) {
		this.content_name = content_name;
	}

	public void setUpdatedAt(Date updatedAt) {
		this.updatedAt = updatedAt;
	}

	public int getStatus() {
		return status;
	}

	public void setStatus(int status) {
		this.status = status;
	}

	public Set<Post> getPosts() {
		return posts;
	}

	public void setPosts(Set<Post> posts) {
		this.posts = posts;
	}

	public Date getCreatedAt() {
		return createdAt;
	}

	public void setCreatedAt(Date createdAt) {
		this.createdAt = createdAt;
	}

	public Date getUpdatedAt() {
		return updatedAt;
	}

	public void setUpdateAt(Date updatedAt) {
		this.updatedAt = updatedAt;
	}
}
