using System;
using System.Collections.Generic;

namespace Znyc.Admin.Commons.Data
{
    /// <summary>
    /// 查询结果数据表样式
    /// </summary>
    public class MicroDataTable
    {
        /// <summary>
        /// 整个查询语句结果的总条数,而非本DataTable的条数
        /// </summary>
        public int TotalCount { get; set; }

        /// <summary>
        /// 数据列名称
        /// </summary>
        public List<MicroDataColumn> Columns { get; set; } = new List<MicroDataColumn>();

        /// <summary>
        /// 数据记录
        /// </summary>
        public List<MicroDataRow> Rows { get; set; } = new List<MicroDataRow>();

        /// <summary>
        /// 主键
        /// </summary>
        public MicroDataColumn[] PrimaryKey { get; set; }

        public MicroDataRow NewRow()
        {
            return new MicroDataRow(Columns, new object[Columns.Count]);
        }
    }

    public class MicroDataColumn
    {
        public string ColumnName { get; set; }
        public Type ColumnType { get; set; }
    }

    public class MicroDataRow
    {
        private readonly object[] _ItemArray;
        public List<MicroDataColumn> Columns { get; private set; }

        public MicroDataRow(List<MicroDataColumn> columns, object[] itemArray)
        {
            Columns = columns;
            _ItemArray = itemArray;
        }

        public object this[int index]
        {
            get => _ItemArray[index];
            set => _ItemArray[index] = value;
        }

        public object this[string columnName]
        {
            get
            {
                int i = 0;
                foreach (MicroDataColumn column in Columns)
                {
                    if (column.ColumnName == columnName)
                    {
                        break;
                    }

                    i++;
                }

                return _ItemArray[i];
            }
            set
            {
                int i = 0;
                foreach (MicroDataColumn column in Columns)
                {
                    if (column.ColumnName == columnName)
                    {
                        break;
                    }

                    i++;
                }

                _ItemArray[i] = value;
            }
        }
    }
}