package com.healthcare.ohctech.entity;

import jakarta.persistence.*;
import org.hibernate.annotations.UpdateTimestamp;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;

@Entity
@Table(name = "employee_appointment")
public class EmployeeAppointment {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "appointment_id")
    private Long id;

    @Column(name = "weight")
    private Float weight;

    @Column(name = "height")
    private Integer height;

    @Column(name = "bmi")
    private Integer bmi;

    @Column(name = "bp_sbp")
    private String bpSbp;

    @Column(name = "bp_dbp")
    private String bpDbp;

    @Column(name = "temperature")
    private String temperature;

    @Column(name = "respiratory_rate")
    private Integer respiratoryRate;

    @Column(name = "pulse_output")
    private Integer pulseOutput;

    @Column(name = "spo2_percent")
    private String spo2Percent;

    @Column(name = "glasgow_coma_scale")
    private Integer glasgowComaScale;

    @Column(name = "ticket_no")
    private String ticketNo;

    @Column(name = "appointment_date")
    private LocalDateTime appointmentDate;

    @Column(name = "appointment_type")
    private String appointmentType;

    @Column(name = "clearance_time")
    private LocalDateTime clearanceTime;

    @Column(name = "case_type")
    private String caseType;

    @Column(name = "followup_to_opd")
    private Integer followupToOpd;

    @ManyToOne
    @JoinColumn(name = "referred_by", referencedColumnName = "id")
    private ReferredBy referredBy;

    @Column(name = "complaints")
    private String complaintIds;

    @Column(name = "examination_remarks")
    private String examinationRemarkIds;

    @Column(name = "ailments_new")
    private String ailmentIds;

    @Column(name = "injury_time")
    private LocalDateTime injuryTime;

    @Column(name = "injury_area_cat")
    private String injuryAreaCat;

    @Column(name = "injury_area_type")
    private String injuryAreaType;

    @Column(name = "incident_location")
    private String incidentLocation;

    @Column(name = "disease_type")
    private String diseaseType;

    @Column(name = "drug_allergy")
    private String saltIds;

    @Column(name = "doc_comment")
    private String docComment;

    @Column(name = "injury_types")
    private String injuryTypeIds;

    @Column(name = "injury_parts")
    private String injuryPartIds;

    @Column(name = "injury_classes")
    private String injuryClassIds;

    @Column(name = "injury_mech")
    private String injuryMechIds;

    @Column(name = "injury_procedure")
    private String injuryProcedure;

    @Column(name = "any_medication")
    private String anyMedication;

    @Column(name = "abnormalitys")
    private String prescriptionMasterIds;

    @Column(name = "doctor_discussed")
    private String doctorDiscussed;

    @Column(name = "health_advices")
    private String healthAdviceIds;

    @Column(name = "recommended_tests")
    private String checkupFormSectionIds;

    @Column(name = "recommended_test_param")
    private String checkupParameterIds;

    @Column(name = "status")
    private String status;

    @Column(name = "remarks_rece")
    private String remarksRece;

    @Column(name = "followup")
    private LocalDateTime followup;

    @Column(name = "followup_remarks")
    private String followupRemarks;

    @Column(name = "rest_from_time")
    private LocalDate restFromTime;

    @Column(name = "rest_to_time")
    private LocalDate restToTime;

    @Column(name = "injury_remarks")
    private String injuryRemarks;

    @ManyToOne
    @JoinColumn(name = "referral",referencedColumnName = "referral_point_id")
    private ReferralPoint referralPoint;

    @Column(name = "referral_doc")
    private String referralDoc;

    @Column(name = "ambulance_used", columnDefinition = "set('Y','N')")
    private String ambulanceUsed;

    @Column(name = "discharge_time")
    private LocalDateTime dischargeTime;

    @ManyToOne
    @JoinColumn(name = "emp_id", referencedColumnName = "patient_master_id")
    private Patient patient;

    @ManyToOne
    @JoinColumn(name = "ohc_type_id", referencedColumnName = "id")
    private OhcType ohcType;

    @Column(name = "modified_by")
    private Long modifiedBy;

    @Column(name = "last_modified")
    @UpdateTimestamp
    private LocalDateTime lastModified;

    // Getters and Setters

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Float getWeight() {
        return weight;
    }

    public void setWeight(Float weight) {
        this.weight = weight;
    }

    public Integer getHeight() {
        return height;
    }

    public void setHeight(Integer height) {
        this.height = height;
    }

    public Integer getBmi() {
        return bmi;
    }

    public void setBmi(Integer bmi) {
        this.bmi = bmi;
    }

    public String getBpSbp() {
        return bpSbp;
    }

    public void setBpSbp(String bpSbp) {
        this.bpSbp = bpSbp;
    }

    public String getBpDbp() {
        return bpDbp;
    }

    public void setBpDbp(String bpDbp) {
        this.bpDbp = bpDbp;
    }

    public String getTemperature() {
        return temperature;
    }

    public void setTemperature(String temperature) {
        this.temperature = temperature;
    }

    public Integer getRespiratoryRate() {
        return respiratoryRate;
    }

    public void setRespiratoryRate(Integer respiratoryRate) {
        this.respiratoryRate = respiratoryRate;
    }

    public Integer getPulseOutput() {
        return pulseOutput;
    }

    public void setPulseOutput(Integer pulseOutput) {
        this.pulseOutput = pulseOutput;
    }

    public String getSpo2Percent() {
        return spo2Percent;
    }

    public void setSpo2Percent(String spo2Percent) {
        this.spo2Percent = spo2Percent;
    }

    public Integer getGlasgowComaScale() {
        return glasgowComaScale;
    }

    public void setGlasgowComaScale(Integer glasgowComaScale) {
        this.glasgowComaScale = glasgowComaScale;
    }

    public String getTicketNo() {
        return ticketNo;
    }

    public void setTicketNo(String ticketNo) {
        this.ticketNo = ticketNo;
    }

    public LocalDateTime getAppointmentDate() {
        return appointmentDate;
    }

    public void setAppointmentDate(LocalDateTime appointmentDate) {
        this.appointmentDate = appointmentDate;
    }

    public String getAppointmentType() {
        return appointmentType;
    }

    public void setAppointmentType(String appointmentType) {
        this.appointmentType = appointmentType;
    }

    public LocalDateTime getClearanceTime() {
        return clearanceTime;
    }

    public void setClearanceTime(LocalDateTime clearanceTime) {
        this.clearanceTime = clearanceTime;
    }

    public String getCaseType() {
        return caseType;
    }

    public void setCaseType(String caseType) {
        this.caseType = caseType;
    }

    public Integer getFollowupToOpd() {
        return followupToOpd;
    }

    public void setFollowupToOpd(Integer followupToOpd) {
        this.followupToOpd = followupToOpd;
    }

    public ReferredBy getReferredBy() {
        return referredBy;
    }

    public void setReferredBy(ReferredBy referredBy) {
        this.referredBy = referredBy;
    }

    public String getComplaintIds() {
        return complaintIds;
    }

    public void setComplaintIds(String complaintIds) {
        this.complaintIds = complaintIds;
    }

    public String getExaminationRemarkIds() {
        return examinationRemarkIds;
    }

    public void setExaminationRemarkIds(String examinationRemarkIds) {
        this.examinationRemarkIds = examinationRemarkIds;
    }

    public String getAilmentIds() {
        return ailmentIds;
    }

    public void setAilmentIds(String ailmentIds) {
        this.ailmentIds = ailmentIds;
    }

    public LocalDateTime getInjuryTime() {
        return injuryTime;
    }

    public void setInjuryTime(LocalDateTime injuryTime) {
        this.injuryTime = injuryTime;
    }

    public String getInjuryAreaCat() {
        return injuryAreaCat;
    }

    public void setInjuryAreaCat(String injuryAreaCat) {
        this.injuryAreaCat = injuryAreaCat;
    }

    public String getInjuryAreaType() {
        return injuryAreaType;
    }

    public void setInjuryAreaType(String injuryAreaType) {
        this.injuryAreaType = injuryAreaType;
    }

    public String getIncidentLocation() {
        return incidentLocation;
    }

    public void setIncidentLocation(String incidentLocation) {
        this.incidentLocation = incidentLocation;
    }

    public String getDiseaseType() {
        return diseaseType;
    }

    public void setDiseaseType(String diseaseType) {
        this.diseaseType = diseaseType;
    }

    public String getSaltIds() {
        return saltIds;
    }

    public void setSaltIds(String saltIds) {
        this.saltIds = saltIds;
    }

    public String getDocComment() {
        return docComment;
    }

    public void setDocComment(String docComment) {
        this.docComment = docComment;
    }

    public String getInjuryTypeIds() {
        return injuryTypeIds;
    }

    public void setInjuryTypeIds(String injuryTypeIds) {
        this.injuryTypeIds = injuryTypeIds;
    }

    public String getInjuryPartIds() {
        return injuryPartIds;
    }

    public void setInjuryPartIds(String injuryPartIds) {
        this.injuryPartIds = injuryPartIds;
    }

    public String getInjuryClassIds() {
        return injuryClassIds;
    }

    public void setInjuryClassIds(String injuryClassIds) {
        this.injuryClassIds = injuryClassIds;
    }

    public String getInjuryMechIds() {
        return injuryMechIds;
    }

    public void setInjuryMechIds(String injuryMechIds) {
        this.injuryMechIds = injuryMechIds;
    }

    public String getInjuryProcedure() {
        return injuryProcedure;
    }

    public void setInjuryProcedure(String injuryProcedure) {
        this.injuryProcedure = injuryProcedure;
    }

    public String getAnyMedication() {
        return anyMedication;
    }

    public void setAnyMedication(String anyMedication) {
        this.anyMedication = anyMedication;
    }

    public String getPrescriptionMasterIds() {
        return prescriptionMasterIds;
    }

    public void setPrescriptionMasterIds(String prescriptionMasterIds) {
        this.prescriptionMasterIds = prescriptionMasterIds;
    }

    public String getDoctorDiscussed() {
        return doctorDiscussed;
    }

    public void setDoctorDiscussed(String doctorDiscussed) {
        this.doctorDiscussed = doctorDiscussed;
    }

    public String getHealthAdviceIds() {
        return healthAdviceIds;
    }

    public void setHealthAdviceIds(String healthAdviceIds) {
        this.healthAdviceIds = healthAdviceIds;
    }

    public String getCheckupFormSectionIds() {
        return checkupFormSectionIds;
    }

    public void setCheckupFormSectionIds(String checkupFormSectionIds) {
        this.checkupFormSectionIds = checkupFormSectionIds;
    }

    public String getCheckupParameterIds() {
        return checkupParameterIds;
    }

    public void setCheckupParameterIds(String checkupParameterIds) {
        this.checkupParameterIds = checkupParameterIds;
    }

    public String getStatus() {
        return status;
    }

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

    public String getRemarksRece() {
        return remarksRece;
    }

    public void setRemarksRece(String remarksRece) {
        this.remarksRece = remarksRece;
    }


    public LocalDateTime getFollowup() {
        return followup;
    }

    public void setFollowup(LocalDateTime followup) {
        this.followup = followup;
    }

    public String getFollowupRemarks() {
        return followupRemarks;
    }

    public void setFollowupRemarks(String followupRemarks) {
        this.followupRemarks = followupRemarks;
    }

    public LocalDate getRestFromTime() {
        return restFromTime;
    }

    public void setRestFromTime(LocalDate restFromTime) {
        this.restFromTime = restFromTime;
    }

    public LocalDate getRestToTime() {
        return restToTime;
    }

    public void setRestToTime(LocalDate restToTime) {
        this.restToTime = restToTime;
    }

    public String getInjuryRemarks() {
        return injuryRemarks;
    }

    public void setInjuryRemarks(String injuryRemarks) {
        this.injuryRemarks = injuryRemarks;
    }

    public ReferralPoint getReferralPoint() {
        return referralPoint;
    }

    public void setReferralPoint(ReferralPoint referralPoint) {
        this.referralPoint = referralPoint;
    }

    public String getReferralDoc() {
        return referralDoc;
    }

    public void setReferralDoc(String referralDoc) {
        this.referralDoc = referralDoc;
    }

    public String getAmbulanceUsed() {
        return ambulanceUsed;
    }

    public void setAmbulanceUsed(String ambulanceUsed) {
        this.ambulanceUsed = ambulanceUsed;
    }

    public LocalDateTime getDischargeTime() {
        return dischargeTime;
    }

    public void setDischargeTime(LocalDateTime dischargeTime) {
        this.dischargeTime = dischargeTime;
    }

    public Patient getPatient() {
        return patient;
    }

    public void setPatient(Patient patient) {
        this.patient = patient;
    }

    public OhcType getOhcType() {
        return ohcType;
    }

    public void setOhcType(OhcType ohcType) {
        this.ohcType = ohcType;
    }

    public Long getModifiedBy() {
        return modifiedBy;
    }

    public void setModifiedBy(Long modifiedBy) {
        this.modifiedBy = modifiedBy;
    }

    public LocalDateTime getLastModified() {
        return lastModified;
    }

    public void setLastModified(LocalDateTime lastModified) {
        this.lastModified = lastModified;
    }
}