using System;
using System.Collections;
using System.Web;
using System.Web.SessionState;
using Spring.Util;

namespace Spring.TestSupport
{
    /// <summary>
    /// Test Session implementation
    /// </summary>
    public class SessionMock : Hashtable, ISessionState
    {
        private bool _isCookieless;
        private bool _isNewSession;
        private int _lcid;
        private SessionStateMode _mode;
        private string _sessionID;
        private int _codePage;
#if NET_2_0
        private HttpCookieMode _cookieMode;
#endif
        public SessionMock() : base(CaseInsensitiveHashCodeProvider.Default, CaseInsensitiveComparer.Default)
        {
            Reset();
        }

        protected virtual void Reset()
        {
            _sessionID = Guid.NewGuid().ToString();
            _isNewSession = false;
            _isCookieless = false;
            _mode = SessionStateMode.InProc;
            _codePage = -1;
#if NET_2_0
            _cookieMode = HttpCookieMode.AutoDetect;
#endif
        }

        public void Abandon()
        {
            Reset();
        }

        public bool IsCookieless
        {
            get { return _isCookieless; }
            set { _isCookieless = value; }
        }

        public bool IsNewSession
        {
            get { return _isNewSession; }
            set { _isNewSession = value; }
        }

        public int LCID
        {
            get { return _lcid; }
            set { _lcid = value; }
        }

        public SessionStateMode Mode
        {
            get { return _mode; }
            set { _mode = value; }
        }

        public string SessionID
        {
            get { return _sessionID; }
            set { _sessionID = value; }
        }

        public int CodePage
        {
            get { return _codePage; }
            set { _codePage = value; }
        }

#if NET_2_0
        public HttpCookieMode CookieMode
        {
            get { return _cookieMode; }
            set { _cookieMode = value; }
        }
#endif
    }
}