namespace Pluto.Api {
    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Linq;
    using RemObjects.SDK;
    using RemObjects.SDK.Types;
    using RemObjects.SDK.Server;
    using RemObjects.SDK.Server.ClassFactories;
    using PlutoServer.MSL;
    using PlutoServer.MSL.Connectors;

    [RemObjects.SDK.Server.ClassFactories.StandardClassFactory()]
    [RemObjects.SDK.Server.Service(Name = "Patient", InvokerClass = typeof(Patient_Invoker), ActivatorClass = typeof(Patient_Activator))]
    public class Patient : RemObjects.SDK.Server.Service, IPatient {
        private System.ComponentModel.Container components = null;
        public Patient() :
            base() {
            this.InitializeComponent();
        }
        private void InitializeComponent() {
        }
        protected override void Dispose(bool aDisposing) {
            if(aDisposing) {
                if((this.components != null)) {
                    this.components.Dispose();
                }
            }
            base.Dispose(aDisposing);
        }

        #region IPatient Members

        public virtual PrescribedMedicationInfo1[] GetMedications(string apiKey, int chartId) 
        {
			return null;
        }

        public virtual AllergyInfo1[] GetAllergies(string apiKey, int chartId) 
        {
			return null;			
        }

        public virtual ProblemInfo1[] GetProblems(string apiKey, int chartId) 
        {
			return null;		
        }

        public virtual ChartInfo1 GetChart(string apiKey, int patientId, int chartId) 
        {
			return null;
        }

        public virtual VitalSignInfo1[] GetVitalSigns(string apiKey, int patientId, int chartId) 
        {
			return null;		
        }

        public virtual void AddNote(string apiKey, int patientId, int chartId, PatientNoteInfo1 patientNote) 
        {
			return;		
        }

        public virtual PatientNoteInfo1[] GetNotes(string apiKey, int patientId, int chartId) 
        {
			return null;		
        }

        public virtual ProcedureInfo1[] GetProcedures(string apiKey, int chartId) 
        {           
            return null;
        }

        public virtual PatientDetail1 GetPatientDetail(string apiKey, string chartId)
        {
            if (ProductType.IsKeyLytec(apiKey))
            {
                return LytecConnector.GetPatientDetail(apiKey, null, chartId, true);
            }
            else if (ProductType.IsKeyMedisoft(apiKey))
            {
                return MedisoftConnector.GetPatientDetail(apiKey, null, chartId, true);
            }

            MSLSpecific.Logger.Error("Invalid Product");
            return null;
        }

        public virtual string CreatePatient(string apiKey, PatientInfo1 basicPatientInfo)
        {
            return String.Empty;
        }

        #endregion
    }
}
