package com.realnet.DynamicDashbard.entities;

import java.util.Date;

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.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;

import com.fasterxml.jackson.annotation.JsonBackReference;

import lombok.Data;

@Data
@Entity
@Table(name = "component_properties")
public class ComponentProperty {
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Long id;

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "component_id", nullable = false)
	@JsonBackReference
	private UiComponent component;

	@Column(name = "property_name", nullable = false, length = 100)
	private String propertyName;

	@Column(name = "property_value", columnDefinition = "TEXT")
	private String propertyValue;

	@Column(name = "property_type", length = 50)
	private String propertyType;

	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "created_at")
	@CreatedDate
	private Date createdAt;

	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "updated_at")
	@LastModifiedDate
	private Date updatedAt;

//	
//    @PrePersist
//    protected void onCreate() {
//        createdAt = LocalDateTime.now();
//        updatedAt = LocalDateTime.now();
//    }
//    
//    @PreUpdate
//    protected void onUpdate() {
//        updatedAt = LocalDateTime.now();
//    }
//    
//    // Constructors
//    public ComponentProperty() {}
//    
//    public ComponentProperty(UiComponent component, String propertyName, String propertyValue, String propertyType) {
//        this.component = component;
//        this.propertyName = propertyName;
//        this.propertyValue = propertyValue;
//        this.propertyType = propertyType;
//    }
//    
//    // Getters and Setters
//    public Long getId() {
//        return id;
//    }
//    
//    public void setId(Long id) {
//        this.id = id;
//    }
//    
//    public UiComponent getComponent() {
//        return component;
//    }
//    
//    public void setComponent(UiComponent component) {
//        this.component = component;
//    }
//    
//    public String getPropertyName() {
//        return propertyName;
//    }
//    
//    public void setPropertyName(String propertyName) {
//        this.propertyName = propertyName;
//    }
//    
//    public String getPropertyValue() {
//        return propertyValue;
//    }
//    
//    public void setPropertyValue(String propertyValue) {
//        this.propertyValue = propertyValue;
//    }
//    
//    public String getPropertyType() {
//        return propertyType;
//    }
//    
//    public void setPropertyType(String propertyType) {
//        this.propertyType = propertyType;
//    }
//    
//    public LocalDateTime getCreatedAt() {
//        return createdAt;
//    }
//    
//    public void setCreatedAt(LocalDateTime createdAt) {
//        this.createdAt = createdAt;
//    }
//    
//    public LocalDateTime getUpdatedAt() {
//        return updatedAt;
//    }
//    
//    public void setUpdatedAt(LocalDateTime updatedAt) {
//        this.updatedAt = updatedAt;
//    }
}