using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using LitJson;

namespace FVS
{
    public enum DataType
    {
        Single,
    }

    public abstract class DataConfigBase
    {
        // Start is called before the first frame update
        public DataType type;
        public DataConfigBase(DataType type)
        {
            this.type = type;
        }

        public abstract void WriteJson(JsonWriter writer);
    }

    public class SingleTableDataConfig : DataConfigBase
    {
        /// <summary>
        /// 支持设置多个固定字段
        /// </summary>
        public DataField[] fields;

        /// <summary>
        /// 数据图层的展示名
        /// </summary>
        public string displayName;

        /// <summary>
        /// 是否支持自定义添加字段
        /// </summary>
        public bool customFields;

        public SingleTableDataConfig(DataField[] fields, string displayName, bool customFields = false) : base(DataType.Single)
        {
            this.fields = fields;
            this.displayName = displayName;
            this.customFields = customFields;
        }

        public override void WriteJson(JsonWriter writer)
        {
            writer.WritePropertyName("fields");
            writer.WriteArrayStart();
            foreach (DataField field in fields)
            {
                writer.WriteObjectStart();
                writer.WritePropertyName("name");
                writer.Write(field.name);
                writer.WritePropertyName("displayName");
                writer.Write(field.displayName);
                writer.WriteObjectEnd();
            }
            writer.WriteArrayEnd();
            writer.WritePropertyName("displayName");
            writer.Write(displayName);
            writer.WritePropertyName("customFields");
            writer.Write(customFields);
        }
    }


    public class DataField
    {
        public string name;
        public string displayName;

        public DataField(string name, string displayName)
        {
            this.name = name;
            this.displayName = displayName;
        }
    }

    public class DatumBase { }
}
