using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using UnivateProperties_API.Containers.Timeshare.Detailed;
using UnivateProperties_API.Model.Banks;
using UnivateProperties_API.Model.Misc;
using UnivateProperties_API.Model.Properties;

namespace UnivateProperties_API.Model.Users
{
    public class Individual : Person
    {
        #region Constructor
        public Individual()
        {

        }

        #endregion Constructor

        #region Properties
        public string IdNumber { get; set; }
        public string CompanyRegNumber { get; set; }        
        [ForeignKey("Address")]
        public int? AddressId { get; set; }
        public string IncomeTaxNumber { get; set; }
        [ForeignKey("BankAccount")]
        public int? BankAccountId { get; set; }
        public MarriedType HowMarried { get; set; }
        public string SpouseName { get; set; }
        public string SpouseSurname { get; set; }
        [DataType(DataType.EmailAddress)]
        public string SpouseEmail { get; set; }
        [Phone]
        public string SpouseTelephone { get; set; }
        [Phone]
        public string SpouseCellnumber { get; set; }

        public virtual Address Address { get; set; }
        public virtual BankAccount BankAccount { get; set; }
        public virtual ICollection<Property> Properties { get; set; }
        #endregion Properties

        #region Methods
        public void UpdateFromDetailedOwner(DetailedOwner owner)
        {
            if (owner.Id == Id)
            {
                Name = owner.Name;
                Surname = owner.Surname;
                IdNumber = owner.IdNumber;
                CompanyRegNumber = owner.CompanyRegNumber;                
                Email = owner.EmailAddress;
                CellNumber = owner.CellNumber;
                Telephone = owner.LandlineNumber;

                if (owner.Address != null)
                {
                    if (Address == null)
                    {
                        Address = new Address()
                        {
                            StreetNumber = owner.Address.StreetNumber,
                            Street = owner.Address.Street,
                            City = owner.Address.City,
                            Suburb = owner.Address.Suburb,
                            Province = owner.Address.Province,
                            PostalCode = owner.Address.PostalCode
                        };
                    }
                    else
                    {
                        Address.StreetNumber = owner.Address.StreetNumber;
                        Address.Street = owner.Address.Street;
                        Address.City = owner.Address.City;
                        Address.Suburb = owner.Address.Suburb;
                        Address.Province = owner.Address.Province;
                        Address.PostalCode = owner.Address.PostalCode;
                    }

                }

                if (owner.BankingDetails != null)
                {
                    if (BankAccount == null)
                    {
                        BankAccount = new BankAccount()
                        {
                            BankId = owner.BankingDetails.BankId,
                            AccountNumber = owner.BankingDetails.AccountNumber,
                            AccountHolder = owner.BankingDetails.AccountHolder
                        };
                    }
                    else
                    {
                        BankAccount.BankId = owner.BankingDetails.BankId;
                        BankAccount.AccountNumber = owner.BankingDetails.AccountNumber;
                        BankAccount.AccountHolder = owner.BankingDetails.AccountHolder;
                    }
                }
            }
        }
        #endregion Methods
    }
}