﻿using System;
using JLGames.RocketDriver.CSharp;
using JLGames.RocketDriver.CSharp.DateTimex;
using UnityEngine;

namespace JLGames.RocketDriver.Games.LocalAccount
{
    [Serializable]
    public class LocalAccount : ICloneable<LocalAccount>, ICloneable
    {
        [Tooltip("Id")] [SerializeField] 
        private string m_UserId;
        [Tooltip("UserName\n用户名")] [SerializeField]
        private string m_UserName;
        [Tooltip("NickName\n昵称")] [SerializeField]
        private string m_UserNick;
        [Tooltip("Password Info\n密码信息")] [SerializeField]
        private string m_UserPasswd;
        [Tooltip("In Gaming\n游戏进行中")] [SerializeField]
        private bool m_Gaming;
        [Tooltip("Last Login Time\n上一次登录时间")] [SerializeField]
        private long m_LoginTime;

        public string UserId => m_UserId;
        public string UserName => m_UserName;
        public string UserNick => m_UserNick;
        public bool IsNewbie => !m_Gaming;
        public bool InGaming => m_Gaming;
        public long LoginTime => m_LoginTime;
        public bool IsGuest => string.IsNullOrEmpty(m_UserName);

        public LocalAccount Clone()
        {
            return new LocalAccount
            {
                m_UserId = m_UserId,
                m_UserName = m_UserName,
                m_UserNick = m_UserNick,
                m_Gaming = m_Gaming,
                m_LoginTime = m_LoginTime,
            };
        }

        object ICloneable.Clone()
        {
            return Clone();
        }

        public override string ToString()
        {
            return $"Id={m_UserId}, UserName={m_UserName}, UserNick={m_UserNick}, Gaming={m_Gaming}";
        }

        public bool CheckPasswd(string passwd)
        {
            return true;
        }

        internal bool FinishNewbie()
        {
            if (m_Gaming) return false;
            m_Gaming = true;
            return true;
        }

        internal void UpdateLoginTime()
        {
            m_LoginTime = DateTimeUtil.NowMilliseconds1970;
        }

        public LocalAccount()
        {
        }

        public LocalAccount(string userId, string userName, string userNick, string userPasswd)
        {
            m_UserId = userId;
            m_UserName = userName;
            m_UserNick = userNick;
            m_UserPasswd = userPasswd;
            m_Gaming = false;
        }
    }
}