using System.Collections.Generic;
using System.Linq;
using Sockeye.Biz;
using Sockeye.Models;

namespace Sockeye.DataList
{
    internal class LicenseDataList : DataListProcessingBase
    {
        public LicenseDataList(long translationId)
        {
            DefaultListAType = SockType.License;
            SQLFrom = @"FROM alicense LEFT JOIN acustomer ON (alicense.customerid = acustomer.id)";

            var RoleSet = BizRoles.GetRoleSet(DefaultListAType);
            AllowedRoles = RoleSet.ReadFullRecord | RoleSet.Change;
            DefaultColumns = new List<string>() { "licensecreated",  "licenseregto", "licensecustomer", "LicenseFetchedOn", "licensetags" };
            DefaultSortBy = new Dictionary<string, string>() { { "licensecreated", "-" } };
            FieldDefinitions = new List<DataListFieldDefinition>();
            /*
            "License": "License",
            "LicenseCompanyName": "Company name",
            "LicenseContactName": "Contact name",
            "LicensedOptions": "Licensed options",
            "LicenseEmail": "Email address",
            "LicenseEmailVerficationHint": "(Address will be verified)",
            "LicenseExpiration": "License expiration date",
            "LicenseSerial": "License serial number",
            await ExecQueryAsync("INSERT INTO atranslationitem(translationid,key,display) SELECT t.id, 'LicenseList', 'Licenses' FROM atranslation t  where t.baselanguage = 'en'");
            await ExecQueryAsync("INSERT INTO atranslationitem(translationid,key,display) SELECT t.id, 'LicenseRegTo', 'Registered to' FROM atranslation t  where t.baselanguage = 'en'");
            await ExecQueryAsync("INSERT INTO atranslationitem(translationid,key,display) SELECT t.id, 'LicenseKey', 'License key' FROM atranslation t  where t.baselanguage = 'en'");
            await ExecQueryAsync("INSERT INTO atranslationitem(translationid,key,display) SELECT t.id, 'LicenseFetchCode', 'Fetch code' FROM atranslation t  where t.baselanguage = 'en'");
            await ExecQueryAsync("INSERT INTO atranslationitem(translationid,key,display) SELECT t.id, 'LicenseFetchEmail', 'Fetch email' FROM atranslation t  where t.baselanguage = 'en'");
            await ExecQueryAsync("INSERT INTO atranslationitem(translationid,key,display) SELECT t.id, 'LicenseFetchedOn', 'Fetched date' FROM atranslation t  where t.baselanguage = 'en'");
            await ExecQueryAsync("INSERT INTO atranslationitem(translationid,key,display) SELECT t.id, 'LicenseDBID', 'DBID' FROM atranslation t  where t.baselanguage = 'en'");
            await ExecQueryAsync("INSERT INTO atranslationitem(translationid,key,display) SELECT t.id, 'LicenseMaintenanceExpire', 'Maintenance expire to' FROM atranslation t  where t.baselanguage = 'en'");
            "CREATE TABLE alicense (id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, created TIMESTAMPTZ NOT NULL, "
            + "customerid BIGINT NOT NULL REFERENCES acustomer(id), regto TEXT NOT NULL, key TEXT NOT NULL, fetchcode TEXT, fetchemail TEXT, "
            + "fetchedon TIMESTAMPTZ, dbid TEXT, licenseexpire TIMESTAMPTZ, maintenanceexpire TIMESTAMPTZ NOT NULL, "
            + "wiki TEXT, tags VARCHAR(255) ARRAY )");
            */

            // FieldDefinitions.Add(new DataListFieldDefinition
            // {
            //     TKey = "LicenseSerial",
            //     FieldKey = "licenseid",
            //     SockType = (int)SockType.License,
            //     UiFieldDataType = (int)UiFieldDataType.Integer,
            //     SqlIdColumnName = "alicense.id",
            //     SqlValueColumnName = "alicense.id",
            //     IsRowId = true
            // });

            FieldDefinitions.Add(new DataListFieldDefinition
            {
                TKey = "Created",
                FieldKey = "licensecreated",
                SockType = (int)SockType.License,
                UiFieldDataType = (int)UiFieldDataType.DateTime,
                SqlIdColumnName = "alicense.id",
                SqlValueColumnName = "alicense.created",
                IsRowId = true
            });

            FieldDefinitions.Add(new DataListFieldDefinition
            {
                TKey = "LicenseRegTo",
                FieldKey = "licenseregto",
                SockType = (int)SockType.License,
                UiFieldDataType = (int)UiFieldDataType.Text,
                SqlIdColumnName = "alicense.id",
                SqlValueColumnName = "alicense.regto"
            });

            FieldDefinitions.Add(new DataListFieldDefinition
            {
                TKey = "Customer",
                FieldKey = "licensecustomer",
                SockType = (int)SockType.Customer,
                UiFieldDataType = (int)UiFieldDataType.Text,
                SqlIdColumnName = "alicense.customerid",
                SqlValueColumnName = "acustomer.name"
            });

            FieldDefinitions.Add(new DataListFieldDefinition
            {
                TKey = "Tags",
                FieldKey = "licensetags",
                UiFieldDataType = (int)UiFieldDataType.Tags,
                SqlValueColumnName = "alicense.tags"
            });



            FieldDefinitions.Add(new DataListFieldDefinition
            {
                TKey = "LicenseMaintenanceExpire",
                FieldKey = "licensemaintexpire",
                UiFieldDataType = (int)UiFieldDataType.DateTime,
                SqlValueColumnName = "alicense.maintenanceexpire"
            });

            FieldDefinitions.Add(new DataListFieldDefinition
            {
                TKey = "LicenseExpiration",
                FieldKey = "licenseexpire",
                UiFieldDataType = (int)UiFieldDataType.DateTime,
                SqlValueColumnName = "alicense.licenseexpire"
            });

            FieldDefinitions.Add(new DataListFieldDefinition
            {
                TKey = "LicenseFetchedOn",
                FieldKey = "LicenseFetchedOn",
                UiFieldDataType = (int)UiFieldDataType.DateTime,
                SqlValueColumnName = "alicense.fetchedon"
            });

            FieldDefinitions.Add(new DataListFieldDefinition
            {
                TKey = "DatabaseID",
                FieldKey = "DatabaseID",
                UiFieldDataType = (int)UiFieldDataType.Text,
                SqlValueColumnName = "alicense.dbid"
            });
        }

    }//eoc
}//eons