package com.saas.tenant.entity;

import com.saas.tenant.listener.MedicalServiceKnowledgeListener;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.JdbcTypeCode;
import org.hibernate.annotations.UpdateTimestamp;
import org.hibernate.type.SqlTypes;

import java.math.BigDecimal;
import java.time.LocalDateTime;

@Entity
@Table(name = "medical_services")
@EntityListeners(MedicalServiceKnowledgeListener.class)
@Data
@NoArgsConstructor
@AllArgsConstructor
public class MedicalService {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false)
    private String name;

    @Column(length = 2000)
    private String description;

    @Enumerated(EnumType.STRING)
    @Column(nullable = false)
    private ServiceType type;

    @Column(nullable = false)
    private Integer durationMinutes;

    @Column(nullable = false, precision = 10, scale = 2)
    private BigDecimal standardPrice;

    @Column(precision = 10, scale = 2)
    private BigDecimal doctorSpecificPrice;

    @Column(name = "keywords", columnDefinition = "JSON")
    private String keywords; // Stored as JSON array string

    @Column(name = "associated_symptoms", columnDefinition = "JSON")
    private String associatedSymptoms; // Stored as JSON array string

    @Column(name = "doctor_id")
    private Long doctorId;

    @Column(name = "requires_resource")
    private Boolean requiresResource = false;

    @Enumerated(EnumType.STRING)
    @Column(name = "required_resource_type")
    private ResourceType requiredResourceType;

    @CreationTimestamp
    @Column(nullable = false, updatable = false)
    private LocalDateTime createdAt;

    @UpdateTimestamp
    private LocalDateTime updatedAt;
}
