using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using ReallifeGamemode.Database.Models;
using ReallifeGamemode.Services;

/**
* @overview Life of German Reallife - Entities UserBankAccount (UserBankAccount.cs)
* @author VegaZ
* @copyright (c) 2008 - 2018 Life of German
*/

namespace ReallifeGamemode.Database.Entities
{
  public partial class UserBankAccount : IBankAccount
  {
    [NotMapped]
    private int _balance;

    public delegate void BankAccountBalanceChangedEvent(UserBankAccount account);
    public static event BankAccountBalanceChangedEvent BalanceChanged;

    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    [StringLength(12)]
    public string Bic { get; set; }

    [StringLength(32)]
    public string Iban { get; set; }

    public int Balance
    {
      get => _balance;

      set
      {
        _balance = value;
        BalanceChanged?.Invoke(this);
      }
    }

    public bool Active { get; set; }
  }
}
