using ICSharpCode.Core;
using Mesnac.Action.ChemicalWeighing.Entity;
using Mesnac.Action.ChemicalWeighing.Technical.PmtRecipe.entity;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Mesnac.Action.ChemicalWeighing.MaterialManage
{
    public partial class FrmMaterial : Form
    {

        #region 字段定义

        private ActionType _actionType = ActionType.Add;    //操作类型,0-为添加,1-为修改
        private Base_MaterialInfo _material = null;             //物料对象

        #endregion

        public FrmMaterial()
        {
            InitializeComponent();
        }
        /// <summary>
        /// 新增物料窗体的构造方法
        /// </summary>
        /// <param name="actionType">操作类型  0为新增</param>
        public FrmMaterial(ActionType actionType)
        {
            InitializeComponent();
            this._actionType = actionType;
        }

        /// <summary>
        /// 修改物料信息的构造方法
        /// </summary>
        /// <param name="actionType">操作类型,1-为修改</param>
        /// <param name="user">用户信息传入的</param>
        public FrmMaterial(ActionType actionType, Base_MaterialInfo material)
        {
            InitializeComponent();
            this._actionType = actionType;
            this._material = material;
        }

        /// <summary>
        /// 物料信息
        /// </summary>
        public Base_MaterialInfo Material
        {
            get { return this._material; }
        }

        private void FrmMaterial_Load(object sender, EventArgs e)
        {
            this.InitUI();
            this.InitData();
        }

        /// <summary>
        /// 初始化界面文本
        /// </summary>
        public void InitUI()
        {
            if (this._actionType == ActionType.Add)
            {
                this.Text = StringParser.Parse(ResourceService.GetString("Menac_Action_ChemicalWeighing_MaterialManage_FrmMaterial_Text_Add"));                //添加物料
            }
            else if (this._actionType == ActionType.Modify)
            {
                this.Text = StringParser.Parse(ResourceService.GetString("Menac_Action_ChemicalWeighing_MaterialManage_FrmMaterial_Text_Modify"));                //修改物料信息
            }
            this.label1.Text = StringParser.Parse(ResourceService.GetString("Menac_Action_ChemicalWeighing_MaterialManage_FrmMaterial_label1_Text"));          //物料名称:
            this.label2.Text = StringParser.Parse(ResourceService.GetString("Menac_Action_ChemicalWeighing_MaterialManage_FrmMaterial_label2_Text"));          //物料编码:
            
        }

        /// <summary>
        /// 数据初始化
        /// </summary>
        public void InitData()
        {
            //当操作类型为修改时,将选中行的数据填入到修改窗体的对应控件中
            if (this._actionType == ActionType.Modify)
            {
                this.MNameTB.Text = _material.materialName;
                this.MCodeTB.Text = _material.materialId;
            }
        }

        private void btnOK_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(MNameTB.Text))
            {
                MessageBox.Show("物料名不能为空!!");
                this.MNameTB.Focus();
                return;
            }
            if (string.IsNullOrEmpty(MCodeTB.Text))
            {
                MessageBox.Show("物料编码不能为空!!");
                this.MCodeTB.Focus();
                return;
            }
            //创建对象
            Base_MaterialInfo material = new Base_MaterialInfo
            {
                materialName = MNameTB.Text,
                materialId = MCodeTB.Text
            };
            //获取包含所有物料对象的集合
            List<Base_MaterialInfo> list = MaterialHelper.getMaterialList();

            //当新增物料时
            //当修改物料时 且物料名、编码都修改了  物料名和编码唯一性都需要验证
            if (_actionType == ActionType.Add || (_actionType == ActionType.Modify && (_material.materialName != material.materialName && _material.materialId != material.materialId)))
            {
                //物料名唯一性验证
                if (list.Exists(m => m.materialName == material.materialName))
                {
                    MessageBox.Show("物料名已存在!!请更换物料名!!");
                    return;
                }
                //物料编码唯一性验证
                if (list.Exists(u => u.materialId == material.materialId))
                {
                    MessageBox.Show("物料编码已存在!!请更换物料编码!!");
                    return;
                }
            }
            //修改物料时 只修改了物料名
            if(_actionType == ActionType.Modify && (_material.materialName != material.materialName && _material.materialId == material.materialId))
            {
                //物料名唯一性验证
                if (list.Exists(m => m.materialName == material.materialName))
                {
                    MessageBox.Show("物料名已存在!!请更换物料名!!");
                    return;
                }
            }
            //修改物料时 只修改了物料编码
            if (_actionType == ActionType.Modify && (_material.materialName == material.materialName && _material.materialId != material.materialId))
            {
                //物料编码唯一性验证
                if (list.Exists(u => u.materialId == material.materialId))
                {
                    MessageBox.Show("物料编码已存在!!请更换物料编码!!");
                    return;
                }
            }
            this._material = material;
            this.DialogResult = System.Windows.Forms.DialogResult.OK;
        }

        private void btnCancel_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}