using BLL;
using Common;
using Model;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Web.Mvc;
using System.Web.Script.Serialization;
using wms;
using Json;
using Lib;
using System.Data;
using Commom.BarCodePrint;

namespace WMS.Areas.BasicInfo.Controllers
{
    public class StorageAjaxController : AjaxPage
    {
        // GET: BasicInfo/StorageAjax
        public ActionResult GetStorageList()
        {
            var dd = Request["ajaxdata"];

            var models = new JavaScriptSerializer().Deserialize<AjaxAreaList>(dd);



            if (models != null)
            {
                PageInfo pageInfo = new PageInfo() { PageIndex = models.pageIndex, PageSize = models.pageSize };


                IDALArea provider = new DALArea();
                List<Area> entity = provider.GetList(models, ref pageInfo).ToList();


                string json = JsonHelper.IListToJson<Area>(entity, "List");
                string pjson = ConvertJson.Serializer(pageInfo);

                ReturnJson.AddProperty("Result", new JsonObject(json));
                ReturnJson.AddProperty("PageInfo", new JsonObject(pjson));
                ReturnJson.AddProperty("Code", 1);
                ReturnJson.AddProperty("Message", "响应成功");
                ReturnJson.AddProperty("SubCode", 0);
                ReturnJson.AddProperty("SubMessage", "");

                return Content(this.ReturnJson.ToString());


            }
            return Content(null);
        }

        // GET: BasicInfo/StorageAjax
        public ActionResult AddStorage()
        {
            var dd = Request["ajaxdata"];
            var models = new JavaScriptSerializer().Deserialize<AjaxAreaInfo>(dd);
            string Operation = models.Operation;


            if (models != null)
            {

                IDALArea provider = new DALArea();
                if (Operation == "Add")
                {
                    //models.CreateUser = this.LoginUserCode;
                    if (!provider.IsExist(nameof(models.StorageNo), models.StorageNo) && !provider.IsExist(nameof(models.StorageName), models.StorageName))
                    {
                        bool value = provider.Add(models);

                        if (value)
                        {
                            ReturnJson.AddProperty("Code", 1);
                            ReturnJson.AddProperty("Message", "添加库区成功");
                            ReturnJson.AddProperty("SubCode", 0);
                            ReturnJson.AddProperty("SubMessage", "");
                        }
                        else
                        {
                            ReturnJson.AddProperty("Code", -1);
                            ReturnJson.AddProperty("Message", "添加库区失败");
                            ReturnJson.AddProperty("SubCode", 0);
                            ReturnJson.AddProperty("SubMessage", "");
                        }
                    }
                    else
                    {
                        ReturnJson.AddProperty("Code", -1);
                        ReturnJson.AddProperty("Message", "该库区已存在!!!");
                        ReturnJson.AddProperty("SubCode", 0);
                        ReturnJson.AddProperty("SubMessage", "");
                    }
                }
                else if (Operation == "Edit")
                {
                    //models.UpdateUser = this.LoginUserCode;
                    bool value = provider.Update(models);

                    if (value)
                    {
                        ReturnJson.AddProperty("Code", 1);
                        ReturnJson.AddProperty("Message", "编辑库区信息成功");
                        ReturnJson.AddProperty("SubCode", 0);
                        ReturnJson.AddProperty("SubMessage", "");
                    }
                    else
                    {
                        ReturnJson.AddProperty("Code", -1);
                        ReturnJson.AddProperty("Message", "编辑库区信息失败");
                        ReturnJson.AddProperty("SubCode", 0);
                        ReturnJson.AddProperty("SubMessage", "");
                    }
                }

            }
            else
            {
                ReturnJson.AddProperty("Code", -1);
                ReturnJson.AddProperty("Message", "库区信息有误!!!");
                ReturnJson.AddProperty("SubCode", 0);
                ReturnJson.AddProperty("SubMessage", "");
            }
            return Content(this.ReturnJson.ToString());
        }

        public ActionResult DelStorage()
        {
            string dd = Request["list"];
            ArrayList models = new JavaScriptSerializer().Deserialize<ArrayList>(dd);
            string[] list = (string[])models.ToArray(typeof(string));
            if (models != null)
            {
                IDALArea provider = new DALArea();
                bool value = provider.BatchDelete(list);

                if (value)
                {
                    ReturnJson.AddProperty("Code", 1);
                    ReturnJson.AddProperty("Message", "删除库区成功");
                    ReturnJson.AddProperty("SubCode", 0);
                    ReturnJson.AddProperty("SubMessage", "");
                }
                else
                {
                    ReturnJson.AddProperty("Code", -1);
                    ReturnJson.AddProperty("Message", "删除库区失败");
                    ReturnJson.AddProperty("SubCode", 0);
                    ReturnJson.AddProperty("SubMessage", "");
                }

                return Content(this.ReturnJson.ToString());
            }
            return Content(null);
        }
        
        /// <summary>
        /// 根据库区信息,生成库位。
        /// </summary>
        /// <returns></returns>
        public ActionResult Createlocation() 
        {
            ReturnJson.AddProperty("SubCode", 0);
            ReturnJson.AddProperty("SubMessage", "");

            try
            {
                var dd = Request["list"];
                ArrayList models = new JavaScriptSerializer().Deserialize<ArrayList>(dd);
                string[] list = (string[])models.ToArray(typeof(string));

                if (models != null) 
                {
                    string StorageNo = list[0];
                    IDALArea provider = new DALArea();
                    // 验证是否已生成库位
                    if (provider.IsCreateLocation(StorageNo))
                    {
                        ReturnJson.AddProperty("Code", -1);
                        ReturnJson.AddProperty("Message", "已生成库位!");
                    }
                    else 
                    {
                        if (provider.Createlocation(StorageNo))
                        {
                            ReturnJson.AddProperty("Code", 1);
                            ReturnJson.AddProperty("Message", "生成库位成功!");
                        }
                        else
                        {
                            ReturnJson.AddProperty("Code", -1);
                            ReturnJson.AddProperty("Message", "生成库位失败!");
                        }
                    }
                }

                return Content(this.ReturnJson.ToString());
            }
            catch (System.Exception ex)
            {
                ReturnJson.AddProperty("Code", -1);
                ReturnJson.AddProperty("Message", ex.Message);
                return Content(this.ReturnJson.ToString());
            }
        }

        /// <summary>
        /// 打印条形码
        /// </summary>
        /// <returns></returns>
        public ActionResult PrintBarCode() 
        {
            ReturnJson.AddProperty("SubCode", 0);
            ReturnJson.AddProperty("SubMessage", "");

            try
            {
                var dd = Request["list"];
                ArrayList models = new JavaScriptSerializer().Deserialize<ArrayList>(dd);
                string[] list = (string[])models.ToArray(typeof(string));

                if (models != null)
                {
                    string StorageNo = list[0];
                    string StorageName = list[1];

                    DALTray provider = new DALTray();
                    DataTable GoodsPosDt = provider.GetGoodsPosPrint(StorageNo);

                    foreach (DataRow row in GoodsPosDt.Rows) 
                    {
                        string addre = row["addre"].ToString();
                        TSC1.TSCPrint(StorageName, addre);
                    }
                    
                    ReturnJson.AddProperty("Code", 1);
                    ReturnJson.AddProperty("Message", "条码打印完成!");
                }

                return Content(this.ReturnJson.ToString());
            }
            catch (System.Exception ex)
            {
                ReturnJson.AddProperty("Code", -1);
                ReturnJson.AddProperty("Message","条码打印失败!  " + ex.Message);
                return Content(this.ReturnJson.ToString());
            }
        }

        public ActionResult BindOption()
        {
            string StorageNO = Request["ajaxdata"];
            try
            {
                ReturnJson.AddProperty("Addreid", LocalHelper.GetAddreList(StorageNO, string.Empty));
                return Content(this.ReturnJson.ToString());
            }
            catch (System.Exception)
            {
                return Content(null);
            }
        }

    }
}