using Newtonsoft.Json;
using OASystem.Domain.Entities.Groups;
using System.Collections;

namespace OASystem.Domain.ViewModels.Groups
{
    public class OrderPreInfoView : Grp_OrderPreInfo
    {
    }

    public class GroupOrderPreInfoListView
    {
        public int Id { get; set; }
 
        public string Name { get; set; }

        public string UnitName { get; set; }

        public string VisitCountryVal { get; set; }

        public string VisitCountrys
        {
            get
            {
                var val = "-";

                try
                {
                    var countryArr = JsonConvert.DeserializeObject<string[]>(VisitCountryVal);

                    if (countryArr.Any()) val = string.Join("、", countryArr);
                }
                catch (Exception) { }

                return val;
            }
        }

        public string VisitDays { get; set; } = "0";

        public string VisiPpNum { get; set; } = "0";

        public object[] VersionDetails { get; set; }

        public string Operator { get; set; }
        public DateTime OperationTime { get; set; }
    }

    public class GrpOrderPreInfoView
    {
        public int Id { get; set; }

        //public int TempId { get; set; }

        public string Name { get; set; }

        public int GroupId { get; set; }

        public GrpOrderPreItemView[] Items { get; set; }
    }

    public class GrpOrderPreItemView
    {
        public int Id { get; set; }
        public int ParentId { get; set; }

        public int FieldTempId { get; set; }

        public string FieldName { get; set; }
        public string FieldTypeName { get; set; }
        public string OriginVal { get; set; }

        private object _newValue;

        public object NewValue
        {
            get
            {
                if (string.IsNullOrEmpty(OriginVal)) return _newValue;

                if (FieldTypeName.Equals("文本"))
                {
                    if (_newValue != null)
                    {
                        OriginVal = _newValue.ToString();
                    }

                    if (OriginVal.Equals("-")) return _newValue;

                    return OriginVal;
                }
                else if (FieldTypeName.Equals("搜索框"))
                {
                    if (_newValue != null)
                    {
                        if (_newValue is Array)
                        {
                            return (Array)_newValue;
                        }
                        else if (_newValue is string[])
                        {
                            return (string[])_newValue;
                        }
                        else if (_newValue is IEnumerable)
                        {
                            return ((IEnumerable)_newValue).Cast<object>().Select(x => x.ToString()).ToArray();
                        }
                        else
                        {
                            return _newValue;
                        }
                    }

                    var val = Array.Empty<string>();
                    try
                    {
                        return JsonConvert.DeserializeObject<string[]>(OriginVal);
                    }
                    catch (Exception)
                    {
                        return val;
                    }
                }
                else if (FieldTypeName.Equals("下拉选择框") || FieldTypeName.Equals("复选框") || FieldTypeName.Equals("数字"))
                {
                    var val = 0;
                    if (_newValue != null)
                    {
                        int.TryParse(_newValue.ToString(), out int val1);
                        OriginVal = val1.ToString();
                        val = val1;
                    }
                    else
                    {
                        int.TryParse(OriginVal, out int val2);
                        OriginVal = val2.ToString();
                        val = val2;
                    }

                    return OriginVal;
                }
                else if (FieldTypeName.Equals("单选按钮"))
                {
                    var val = "无";
                    if (OriginVal.Equals("有")) val = "有";

                    if (_newValue != null)
                    {
                        if (_newValue.ToString().Equals("有")) val = "有";
                    }

                    OriginVal = val;
                    return val;
                }
                return null;
            }
            set { _newValue = value; }
        }

        public string Remark { get; set; }
        public bool IsRequired { get; set; }
        public bool IsRemark { get; set; }
        public int Index { get; set; }
    }
}