ComputerPlace.cs 7.08 KB
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Drawing;
using System.Web.Script.Serialization;
using System.ComponentModel;
using MoyaAdminUI.MoyaAPI;
using MoyaAdminLib;

namespace MoyaAdminLib
{
    public class ComputerPlace
    {
        public ComputerPlace(Place place)
        {
            APIreference = place;
        }
        public ComputerPlace()
        {
            APIreference = new Place();
        }
        private Place APIreference;
        public Place APIReference
        {
            get { return APIreference; }
        }
        public int Id
        {
            get { return APIreference.id; }
        }
        [Description("Buyer")]
        public int ReserverId
        {
            get { return APIreference.reserverId; }
            //set { APIreference.reserverId = value; }
        }
        [Category("Place map"),ReadOnly(true)]
        public int MapId
        {
            get { return APIreference.mapId; }
            set { APIreference.mapId = value; }
        }
        [Category("Reservation")]
        public int ProductId
        {
            get { return APIreference.productId; }
            set 
            {
                if (value != APIreference.productId)
                {
                    APIreference.productId = value;
                    Dirty = true;
                }
            }
        }
        

        public bool Dirty = false;

        [Category("Place map")]
        public bool Buyable
        {
            get 
            { return APIreference.buyable; }
            set 
            {
                if (value != APIreference.buyable)
                {
                    this.Dirty = true;
                    APIreference.buyable = value;
                }
            }
        }
        public string Details
        {
            get { return APIreference.details; }
            set { APIreference.details = value; }
        }
        [Category("Place map"),DisplayName("Hide")]
        public bool Disabled
        {
            get 
            {
                return APIreference.disabled;
                
            }
            set 
            {
                if (value != APIreference.disabled)
                {
                    this.Dirty = true;
                    APIreference.disabled = value;
                }
            }
        }
        [Category("Reservation")]
        public bool Taken
        {
            get { return APIreference.taken; }
        }
        [Category("Place map")]
        public int Height
        {
            get { return APIreference.height; }
            set { APIreference.height = value; }
        }
        [Category("Place map")]
        public int Width
        {
            get { return APIreference.width; }
            set { APIreference.width = value; }
        }
        [Category("Place map"),DisplayName("X")]
        public int MapX
        {
            get { return APIreference.mapX; }
            set { APIreference.mapX = value; }
        }
        [Category("Place map"), DisplayName("Y")]
        public int MapY
        {
            get { return APIreference.mapY; }
            set { APIreference.mapY = value; }
        }
        [Category("Place map")]
        public string Name
        {
            get { return APIreference.name; }
            set { APIreference.name = value; }
        }
        
        User reserverUserCache = null;
        [Category("Reservation"), DisplayName("Player"), Description("Person who will sit to place")]
        public string ReserverUserName
        {
            get
            {
                if (reserverUserCache == null)
                {
                    if (APIreference.eventuserId > 0)
                    {
                        foreach (User u in User.Cache)
                        {
                            if (u.EventUserId == APIreference.eventuserId)
                            {
                                reserverUserCache = u;
                                break;
                            }
                        }
                    }
                    // Still no hit, use buyer
                    if (reserverUserCache == null)
                    {
                        foreach (User u in User.Cache)
                        {
                            if (u.EventUserId == APIreference.reserverId)
                            {
                                reserverUserCache = u;
                                break;
                            }
                        }
                    }
                }

                if (reserverUserCache == null)
                    return "free";
                else return
                    reserverUserCache.ToString();
            }
        }

        User buyerUserCache = null;
        [Category("Reservation"), DisplayName("Buyer"), Description("Person who had payed place")]
        public User User
        {
            get 
            {
                if (buyerUserCache == null)
                {
                    foreach (User u in User.Cache)
                    {
                        if (u.EventUserId == APIreference.reserverId)
                        {
                            buyerUserCache = u;
                            break;
                        }
                    }
                }
                return buyerUserCache;
            }
            
        }


        public Point GetPoint()
        {
            return new Point(this.MapX, this.MapY);
        
        }
        public Size GetSize()
        {
            return new Size(this.Width, this.Height);
        }
        public void SetSize(Size size)
        {
            this.Width = size.Width;
            this.Height = size.Height;
        }

        public void Save()
        {
            APIreference.Save();
            this.Dirty = false;
        }

        public void Reload()
        {
        }
        public void Delete()
        {
            Cache.Remove(this);
        }
        public static List<ComputerPlace> Cache = new List<ComputerPlace>();
        public static void LoadAll(int mapId)
        {
            ComputerPlace.Cache.Clear();
            
            RestClient client = new RestClient();
            string json = client.MakeRequest("placeadmin/places/" + mapId);
            var ser = new JavaScriptSerializer();
            PlaceMap map = ser.Deserialize<PlaceMap>(json);
            if (map != null)
            {
                foreach (Place p in map.places)
                {
                     ComputerPlace.Cache.Add(new ComputerPlace(p));
                }
            }
            
        }
        public void Release()
        {
            reserverUserCache = null;
            buyerUserCache = null;
            APIreference.Release();

        }
        /*
        public static int DefaultWidth = 23;
        public static int DefaultHeight = 23;
         * */
        public void Reserve(User user)
        {
            reserverUserCache = null;
            buyerUserCache = null;
            APIreference.Reserve(user.EventUserId);
        }
    }
}