namespace Pluto.Api {
    using System;
    using RemObjects.SDK;
    using RemObjects.SDK.Types;
    using RemObjects.SDK.Server;
    using RemObjects.SDK.Server.ClassFactories;
    using PlutoServer.PracticeChoice;


    [RemObjects.SDK.Server.ClassFactories.StandardClassFactory()]
    [RemObjects.SDK.Server.Service(Name = "Authentication", InvokerClass = typeof(Authentication_Invoker), ActivatorClass = typeof(Authentication_Activator))]
    public class Authentication : RemObjects.SDK.Server.Service, IAuthentication {

        private System.ComponentModel.Container components = null;
        public Authentication() :
            base() {
            this.InitializeComponent();
        }

        private void InitializeComponent() {
            
        }

        protected override void Dispose(bool aDisposing) {
            if(aDisposing) {
                if((this.components != null)) {
                    this.components.Dispose();
                }
            }
            base.Dispose(aDisposing);
        }

        public virtual UserInfo1 Login1(string apiKey, PracticeInfo1 practiceInfo, string userId, string password) {
            UserInfo1 userInfo = null;
            var auth = new PlutoServer.PracticeChoice.Security.Authentication();
            try {
                userInfo = auth.Login(userId, password, practiceInfo.Id);
                if(!string.IsNullOrEmpty(userInfo.AuthToken)) {
                    System.Diagnostics.Debug.WriteLine(this.SessionID.ToString());
                    this.Session[SessionKeys.AuthToken] = userInfo.AuthToken;
                }
            } catch(Exception ex) {
                this.DestroySession();
                throw;
            }
            return userInfo;
        }

        #region IAuthentication Members


        public PracticeInfo1[] GetPracticeList1(string apiKey) {
            return null;
        }

        #endregion
    }
}
