using System;
using TINK.Repository;

namespace TINK.Model.Connector
{
    /// <summary>Holds user infromation required for copri related commands/ query operations. </summary>
    public class BaseLoggedIn : Base
    {
        /// <summary>Session cookie used to sign in to copri.</summary>
        public string SessionCookie { get; }

        /// <summary> Mail address of the user. </summary>
        protected string Mail { get; }

        /// <summary> Object which provides date time info. </summary>
        protected readonly Func<DateTime> DateTimeProvider;

        /// <summary>Constructs a copri query object.</summary>
        /// <param name="p_oCopriServer">Server which implements communication.</param>
        public BaseLoggedIn(ICopriServerBase p_oCopriServer,
            string p_strSessionCookie,
            string p_strMail,
            Func<DateTime> p_oDateTimeProvider) : base(p_oCopriServer)
        {
            if (string.IsNullOrEmpty(p_strSessionCookie))
                throw new ArgumentException("Can not instantiate query object- object. Session cookie must never be null or emtpy.");

            if (string.IsNullOrEmpty(p_strMail))
                throw new ArgumentException("Can not instantiate query object- object. Mail address must never be null or emtpy.");

            DateTimeProvider = p_oDateTimeProvider
                ?? throw new ArgumentException("Can not instantiate connector- object. No date time provider object available.");

            SessionCookie = p_strSessionCookie;

            Mail = p_strMail;
        }
    }
}