﻿using System;
using System.IO;
using System.Xml.Serialization;

namespace Assets.BAndCCore.CustomTypes
{
	[Serializable]
	public class AccountData
	{
		private bool m_rememberLogin;
		private string m_login;
		private string m_password;

		private const string SubfolderName = "Settings";
		private const string FileName = "Account.xml";
		private const string FilePath = SubfolderName + "/" + FileName;

		public AccountData(bool rememberLogin, string login, string password)
		{
			m_rememberLogin = rememberLogin;
			m_login = login;
			m_password = password;
		}

		public AccountData()
			: this(false, "", "")
		{ }

		public bool RememberLogin
		{
			get { return m_rememberLogin; }
			set { m_rememberLogin = value; }
		}

		public string Login
		{
			get { return m_login; }
			set { m_login = value; }
		}

		public string Password
		{
			get { return m_password; }
			set { m_password = value; }
		}

		public void Serialize()
		{
			XmlSerializer serializer = new XmlSerializer(this.GetType());

			if (!Directory.Exists(SubfolderName))
			{
				Directory.CreateDirectory(SubfolderName);
			}

			if (!RememberLogin)
			{
				Login = "";
			}

			string temPass = Password;
			Password = "";

			File.WriteAllText(FilePath, "");
			var writer = File.AppendText(FilePath);

			serializer.Serialize(writer, this);

			writer.Close();

			Password = temPass;
		}

		public void Deserialize()
		{
			if (!File.Exists(FilePath))
			{
				this.Serialize();
			}

			string xmlData = File.ReadAllText(FilePath);
			XmlSerializer serializer = new XmlSerializer(this.GetType());
			AccountData data = (AccountData)serializer.Deserialize(new StringReader(xmlData));

			RememberLogin = data.RememberLogin;
			Login = data.Login;
			Password = "";
		}
	}
}