using Sockeye.Biz;
using Newtonsoft.Json;

namespace Sockeye.DataList
{
    //This class defines a field used for returning data in list format for UI grid lists and reporting
    public class DataListFieldDefinition
    {
        //CLIENT / SERVER Unique identifier used at BOTH client and server
        //also the sql valuecolumnname if identical
        public string FieldKey { get; set; }

        //CLIENT Use only for display
        public string TKey { get; set; }

        //CLIENT Use only for display to disambiguate things like
        //Tags in main workorder and Tags in Workorder Item and Tags in Unit (all on same list)
        public string TKeySection { get; set; }

        //CLIENT / SERVER - client display server validation purposes
        public bool IsCustomField { get; set; }

        //CLIENT / SERVER - client display server validation purposes
        public bool IsFilterable { get; set; }

        //CLIENT / SERVER - client display server validation purposes
        public bool IsSortable { get; set; }

        //SERVER - indicates internal only meta column, not a client thing
        public bool IsMeta { get; set; }

        //CLIENT Use only for display
        public int UiFieldDataType { get; set; }

        //CLIENT Use only for display
        public string EnumType { get; set; }

        //SERVER / CLIENT - used to identify the column that represents the entire row ID and object
        //MUST be present in all datalists and displayed at the client
        public bool IsRowId { get; set; }

        //CLIENT / SERVER - client display and to indicate what object to open , Server for formatting return object      
        public int SockType { get; set; }

        //CLIENT - indicates client must translate the values in this column (typically computed columns based on aygetname procedure)
        public bool Translate { get; set; }

        //SERVER - for building sql queries 
        //don't return these properties when api user fetches field list definitions in DataListController
        [JsonIgnore]
        public string SqlIdColumnName { get; set; }
        [JsonIgnore]
        public string SqlValueColumnName { get; set; }
        [JsonIgnore]
        public string SqlATypeColumnName { get; set; }//column to fetch the SockType openabel  for this field to set it dynamically instead of preset
        [JsonIgnore]
        public string SqlColorColumnName { get; set; }//column to fetch the color if applicable to this field
       
        public DataListFieldDefinition()
        {
            //most common defaults           
            IsCustomField = false;
            IsFilterable = true;
            IsSortable = true;
            IsRowId = false;
            IsMeta = false;
            Translate = false;
            //Set openable object type to no type which is the default and means it's not a link to another object
            SockType = (int)Biz.SockType.NoType;
            SqlATypeColumnName = null;//must be null as that is checked against specifically
            SqlColorColumnName = null;//must be  null to be ignored properly               
               
        }

        //Get column to query for display name or use FieldName if there is no difference
        public string GetSqlValueColumnName()
        {
            if (string.IsNullOrEmpty(SqlValueColumnName))
            {
                return FieldKey.ToLowerInvariant();
            }
            else
            {
                return SqlValueColumnName;
            }
        }

        public bool HasIdColumn()
        {
            return !string.IsNullOrWhiteSpace(SqlIdColumnName);
        }

    }
}