using Bootstrap.Admin.Models;
using Bootstrap.DataAccess;
using Longbow.Security.Principal;
using Newtonsoft.Json.Linq;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;

namespace Bootstrap.Admin.Controllers
{
    public class MenusController : ApiController
    {
        /// <summary>
        /// 
        /// </summary>
        /// <param name="value"></param>
        /// <returns></returns>
        [HttpGet]
        public QueryData<Menu> Get([FromUri]QueryMenuOption value)
        {
            return value.RetrieveData(User.Identity.Name);
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="value"></param>
        [HttpPost]
        public bool Post([FromBody]Menu value)
        {
            return MenuHelper.SaveMenu(value);
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="id"></param>
        [HttpDelete]
        public bool Delete([FromBody]string value)
        {
            return MenuHelper.DeleteMenu(value);
        }
        [HttpPost]
        public IEnumerable<Menu> Post(int id, [FromBody]JObject value)
        {
            var ret = new List<Menu>();
            dynamic json = value;
            switch ((string)json.type)
            {
                case "role":
                    ret = MenuHelper.RetrieveMenusByRoleId(id).ToList();
                    break;
                case "user":
                    ret = MenuHelper.RetrieveAllMenusByUserName(User.Identity.Name).ToList();
                    break;
                default:
                    break;
            }
            return ret;
        }
        [HttpPut]
        public bool Put(int id, [FromBody]JObject value)
        {
            var ret = false;
            dynamic json = value;
            string menuIds = json.menuIds.ToString();
            switch ((string)json.type)
            {
                case "role":
                    ret = MenuHelper.SaveMenusByRoleId(id, menuIds);
                    break;
                default:
                    break;
            }
            return ret;
        }
    }
}