using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using Newtonsoft.Json;
namespace Sockeye.Models
{

    public class GlobalBizSettings
    {

        //This is the replacement for most of the Global object settings in v7 which has been subdivided further in v8 into backup / ops / notification and this general biz
        //this object is only interested in Business object related settings and configuration specifically


        public long Id { get; set; }//this is always 1 as there is only ever one single global biz object
        public uint Concurrency { get; set; }

        //Global settings
        //#############  NOTE: OTHER AREAS THAT MUST MATCH CHANGES HERE ARE:
        //GlobalBizSettingsController::GetClientGlobalBizSettings
        //ServerGlobalBizSettings

        //Picklist and other searches override the normal case insensitive value
        //this is precautionarily added for non latinate languages where it could be an issue
        public bool FilterCaseSensitive { get; set; }
       


        //ADDRESS / CONTACT INFO reporting etc
        public string WebAddress { get; set; }
        public string EmailAddress { get; set; }
        public string Phone1 { get; set; }
        public string Phone2 { get; set; }
        //POSTAL ADDRESS
        public string PostAddress { get; set; }
        public string PostCity { get; set; }
        public string PostRegion { get; set; }
        public string PostCountry { get; set; }
        public string PostCode { get; set; }

        //PHYSICAL ADDRESS
        public string Address { get; set; }
        public string City { get; set; }
        public string Region { get; set; }
        public string Country { get; set; }
        public string AddressPostal { get; set; }
        public decimal? Latitude { get; set; }
        public decimal? Longitude { get; set; }


        //CUSTOMER ACCESS FEATURES AND SETTINGS     
     


        public bool CustomerAllowUserSettings { get; set; }
        public List<string> CustomerAllowUserSettingsInTags { get; set; } = new List<string>();





        public List<string> AllTags(){
            var t=new List<string>();
     
            t.AddRange(this.CustomerAllowUserSettingsInTags);
            return t;            
        }

        public GlobalBizSettings()
        {
            Id = 1;//always 1  
            FilterCaseSensitive = false;
        }
    }

    //Used internally and at client end as extended rights atop roles system in relation only to Contact (customer type users)
    public record CustomerRightsRecord(bool UserSettings,  long EntityId, bool EntityActive);
}
/*
CREATE TABLE [dbo].[AGLOBAL](
	[ACREATED] [datetime] NULL,
	[AMODIFIED] [datetime] NULL,
	[ACREATOR] [uniqueidentifier] NULL,
	[AMODIFIER] [uniqueidentifier] NULL,
	[ATAXPARTPURCHASEID] [uniqueidentifier] NULL,
	[ATAXPARTSALEID] [uniqueidentifier] NULL,
	[ATAXRATESALEID] [uniqueidentifier] NULL,
	[AALLOWSCHEDULECONFLICTS] [bit] NOT NULL,
	[ALANGUAGE] [nvarchar](255) NULL,
	[AUSEREGIONS] [bit] NOT NULL,
	[AWORKORDERCLOSEDSTATUS] [uniqueidentifier] NULL,
	[AWORKORDERSUMMARYTEMPLATE] [nvarchar](500) NOT NULL,
	[AUSEINVENTORY] [bit] NOT NULL,
	[AUNITNAMEFORMAT] [smallint] NULL,
	[ASCHEDULEABLEUSERNAMEFORMAT] [smallint] NULL,
	[ACJKINDEX] [bit] NOT NULL,
	[APARTFORMAT] [smallint] NULL,
	[AWORKORDERCLOSEBYAGE] [int] NOT NULL,
	[AUSENOTIFICATION] [bit] NOT NULL,
	[ANOTIFYSMTPHOST] [nvarchar](255) NULL,
	[ANOTIFYSMTPACCOUNT] [nvarchar](255) NULL,
	[ANOTIFYSMTPPASSWORD] [nvarchar](255) NULL,
	[ANOTIFYSMTPFROM] [nvarchar](255) NULL,
	[ACOORDINATESTYLE] [smallint] NULL,
	[ADEFAULTLATITUDE] [smallint] NULL,
	[ADEFAULTLONGITUDE] [smallint] NULL,
	[ADEFAULTSERVICETEMPLATEID] [uniqueidentifier] NULL,
	[AMAXFILESIZEMB] [int] NULL,
	[ALABORSCHEDUSERDFLTTIMESPAN] [int] NOT NULL,
	[ATRAVELDFLTTIMESPAN] [int] NOT NULL,
	[ANOTIFYENCRYPTION] [nvarchar](255) NULL,
	[ASMTPRETRY] [bit] NOT NULL,
	[AFORMCUSTOM] [ntext] NULL,
	[ASIGNATURETITLE] [ntext] NULL,
	[ASIGNATUREHEADER] [ntext] NULL,
	[ASIGNATUREFOOTER] [ntext] NULL,
	[ASCHEDUSERNONTODAYSTARTTIME] [datetime] NULL,
	[AMAINGRIDAUTOREFRESH] [bit] NOT NULL
*/