using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LHDN.CRM.BC.Common
{
    public class Constant
    {
        public enum ResultType
        {
            Failed = 'F',
            Success = 'S'
        }

        public class ManualFileName
        {
            public const string AgentUserManual = "[LHDN] SMART_User Manual_Agent.pdf";
            public const string CounterUserManual = "[LHDN] SMART_User Manual_Counter.pdf";
            public const string GeneralManual = "[LHDN] SMART_User Manual_General.pdf";
            public const string OutboundMgmtManual = "[LHDN] SMART_User Manual_General.pdf";
            public const string PEKELILINGOPERASI = "PEKELILING OPERASI.pdf";
            public const string SMARTKAUNTER = "SMART KAUNTER LATTEST.pptx";
            public const string SMARTBACKOFFICE = "SMART BACK OFFICE LATTEST.pptx";
        }



        public enum ManualFileType
        {
            AgentUserManual = 1,
            CounterUserManual = 2,
            GeneralManual = 3,
            OutboundMgmtManual = 4,
            PEKELILINGOPERASI = 5,
                SMARTKAUNTER = 6,
            SMARTBACKOFFICE = 7,
            IssueTracking = 8
        }

        public enum ActionType
        {
            Add,
            Update,
            Delete,
            Approve,
            Cancel,
            Reject,
            ViewReport,
            GenerateReport,
            View
        }

        public enum UpdateType
        {
            Insert = 1,
            Update = 2,
            Delete = 3
        }

        public enum TableType
        {
            TaxPayer = 1,
            Case = 2,
            Activity = 3,
            Task = 4,
            Outbound = 5,
            Outbound_View = 6,
            Outbound_Campaign = 7,
            Outbound_Schedule = 8,
            Inbound = 9,
            HCL_EmailView = 10,
            HCL_EmailCampaign = 11,
            HCL_EmailSchedule = 12,
            HCLEmailBlast = 13,
            TP_View = 14,
            Case_View = 15,
            Act_View = 16
        }

        public enum JenisKempenKategori
        {
            KesAnsuran = 23,
            KesCDLYDL = 24,
            KesCTL = 25,
            KempenHCL = 26
        }

        public enum JenisKempen
        {
            AnsuranAudit = 1,
            AnsuranPungutan = 2,
            AnsuranSiasatan = 3,
            CDL = 4,
            CTL = 5,
            CP38 = 6,
            CP204 = 7,
            CP500 = 8,
            GuamanSivilCKHT = 9,
            GuamanSivilCP = 10,
            YDL = 11,
            PematuhanCukai = 12,
        }

        public enum MessageType
        {
            New = 1,
            Summary = 2,
            PromiseToPay = 3,
            Due = 4,
            Import = 5
        }

        public class WorkFlow
        {
            public enum WorkflowStatus
            {
                [Description("Pending Review")]
                PendingReview = 1,
                [Description("Pending Action")]
                PendingAction = 2,
                Open = 3,
                Closed = 4
            }

            public enum WorkflowDecision
            {
                Submit = 5,
                Assign = 6,
                Recall = 7,
                Return = 8,
                Reassign = 9,
                Close = 17
            }

            public enum AssignToType
            {
                Branch = 19,
                Unit = 20,
                User = 21,
                Role = 22
            }
        }

        public class UserWorkflow
        {
            public enum UserWorkflowStatus
            {
                [Description("Dalam Pengemukaan")]
                Draft = 53,
                [Description("Dalam Semakan")]
                PendingReview = 54,
                [Description("Dalam Tindakan")]
                PendingApproval = 55,
                Diluluskan = 56,
                Ditolak = 57,
                Selesai = 58,
                [Description("Batal Permohonan")]
                CancelRequest = 67
            }

            public enum UserWorkflowDecision
            {
                Draft = 59,
                Reviewed =60,
                Approved = 61,
                Rejected = 62,
                [Description("Cancel Request")]
                CancelRequested = 68


            } 

            public enum UserAssignToType
            {
                Unit = 20,
                User = 21

            }

            public enum UserWFActionType
            {
                [Description("Add")]
                Add = 1,
                [Description("Update")]
                Update = 2
            }

            public enum UserWFActiveCondition
            {
                [Description("Active")]
                Active = 63,
                [Description("Inactive")]
                Inactive = 64,
                [Description("Dormant")]
                Dormant = 65,
                [Description("Expiry")]
                Expiry = 66
            }

            public class UserWFRemarks
            {
                public const string PendingReviewRemark = "Untuk Semakan ";
                public const string PendingApprovalRemark = "Untuk Kelulusan ";
                public const string ApprovalRemark = "Lulus ";
                public const string RejectRemark = "Tolak  : ";
            }

            public enum UserJenisPermohonanType
            {
                Baru = 69,
                Kemaskini = 70,
            }
        }

        public class Authentication
        {
            public class TaxPayer
            {
                public const string ViewTaxPayer = "TP1";
                public const string VIPOwnBranch = "TP1";
                public const string VIPAllBranch = "TP2";
                public const string BiasaOwnBranch = "TP3";
                public const string BiasaAllBranch = "TP4";
                public const string TaksiranTab = "TP5";
                public const string PungutanTab = "TP6";
                public const string SocialMedia = "TP7";
                public const string UpdateTPProfile = "TP8";
                public const string SearchTPProfile = "TP9";
            }

            public class Activity
            {
                public const string ViewActivityProfile = "ACT1";
                public const string SocialMedia = "ACT2";
                public const string VIPOwnBranch = "ACT3";
                public const string VIPAllBranch = "ACT4";
                public const string BiasaOwnBranch = "ACT5";
                public const string BiasaAllBranch = "ACT6";
                public const string CreateUpdateProfile = "ACT7";
                public const string CreateUpdateCatatan = "ACT8";
                public const string SearchActivityProfile = "ACT9";
                public const string AssignActivityProfile = "ACT10";
                public const string ViewPendingActivity = "ACT11";
                public const string ReopenActivity = "ACT12";
                public const string DeleteActivity = "ACT13";
                public const string ViewDMSDocument = "ACT14";
                public const string PrintNotaTemuduga = "ACT15";
                public const string TransfertoCase = "ACT16";
            }

            public class Cases
            {
                public const string ViewCaseProfile = "C1";
                public const string CreateUpdateCase = "C2";
                public const string SearchCaseProfile = "C3";
                public const string CreateUpdateCatatan = "C4";
                public const string AssignCase = "C5";
                public const string ViewPendingCase = "C6";
                public const string CloseCase = "C7";
                public const string Reopencase = "C8";
                public const string DeleteCase = "C9";
                public const string ViewDMSDocument = "C10";
                public const string PrintNotaTemuduga = "C11";
                public const string ReassignCase = "C12";
            }

            public class Task
            {
                public const string CreateUpdateTask = "T1";
                public const string SearchTask = "T2";
                public const string DeleteTask = "T3";
            }

            public class HCL
            {
                public const string UploadHCLEmail = "HCLE1";
                public const string ViewHCLEmail = "HCLE2";
                public const string CreateHCLEmailRules = "HCLE3";
                public const string CreateHCLEmailCampaign = "HCLE4";
                public const string CreateHCLEmailSchedule = "HCLE5";
                public const string SearchEmailHistory = "HCLE6";
                public const string HRCCTestEmailBlast = "HCLE7";
            }

            public class CallCentre
            {
                public const string RetrieveTranscript = "CC1";
                public const string RetrieveEmailContent = "CC2";
            }

            public class Administration
            {
                public const string ManageBusinessParameter = "ADM1";
                public const string ManageSystemParameter = "ADM2";
                public const string ManageBackOfficeWorkflow = "ADM3";
                public const string ManageTaxPayerSearchView = "ADM4";
                public const string ManageActivitySearchView = "ADM5";
                public const string ManageCaseSearchView = "ADM6";
                public const string ManageDashboardView = "ADM7";
                public const string ManageCommunicationTemplate = "ADM8";
                public const string ManageAdditionalFields = "ADM9";
                public const string ManageTraineeAPproval = "ADM10";
                public const string ManageCaseReassignment = "ADM11";
                public const string ManageIncidentReport = "ADM12";
                public const string ManageCFFRouting = "ADM13";
                public const string RequestUserCreation = "ADM14";
                public const string RequestUpdateUserProfile = "ADM15";
                public const string ReviewUserProfileCreationUpdate = "ADM16";
                public const string ApproveUserProfileCreationUpdate = "ADM17";
                public const string EditUserProfile = "ADM18";
                public const string ManageUserRole = "ADM19";
                public const string SetUserStatus = "ADM20";
                public const string ViewAudit = "ADM21";
            }

            public class Outbound
            {
                public const string SearchOutboundList = "OB1";
                public const string ViewOutboundProfile = "OB2";
                public const string EditOutboundProfile = "OB3";
                public const string ManageSegmentization = "OB4";
                public const string ManageCampaign = "OB5";
                public const string ReturnOutboundList = "OB6";
            }

            public class Others
            {
                public const string ExportToExcel = "O1";
            }

        }

        public class UserRole
        {
            public const int CounterOfficer = 1;
            public const int PARUnitMel = 2;
            public const int PenyeliaKaunter = 3;
            public const int CCO = 4;
            public const int PegawaiBackOffice = 5;
            public const int KetuaUnitCawangan = 6;
            public const int Pengurus = 7;
            public const int PengarahCawangan = 8;
            public const int PengarahNegeri = 9;
            public const int HCLAgent = 10;
            public const int PengarahBahagian = 11;
            public const int PengarahJabatan = 12;
            public const int UserAdmin = 13;
            public const int SystemAdmin = 14;
            public const int HRCCAgent = 15;
            public const int Manager = 16;

        }

        public class AdvancedRules
        {
            public class FieldType
            {
                public const int DateType = 14;
            }
        }

        public enum EmailTemplate
        {
            CFFEnquirytoTaxPayer = 1,
            CFFNotificationtoTaxPayer = 2,
            BackOfficeReviewNotification = 3,
            ReassignCaseNotification = 4,
            TraineeApprovalNotification = 5,
            ReassignTraineeApprovalNotification = 6,
            TaskNotification = 7,
            TaskExpiring = 8,
            SurveyCounter = 9,
            GeneralTemplate = 10,
            PrintSlipKedatangan = 14,
            PrintPenerimaanDoc = 17,
            PrintActPenerimaanDoc = 18,
            ActBackOfficeReviewNotification = 22,
            CFFActBackOfficeReviewNotification = 23,
            UserProfileWFNotification = 24,
            UserProfileApprovalNotification = 25,
            EscalateToDirectManager = 26
        }

        public class EmailTemplateType
        {
            public const string System = "S";
            public const string EFailing = "A";
            public const string General = "B";
        }

        public class Sessions
        {
            public const string LoginInfo = "LHDN.CRM.LoginInfo";
        }

        public class RecentActivity
        {
            public const string TaskURL = "/task/detail/{0}";
            public const string CaseURL = "/case/profile/detail/{0}";
            public const string ActivityURL = "/activity/profile/detail/{0}";
            public const string OutboundURL = "/Outbound/profile/detail/{0}/{1}";

            public const string TaskCreatedMsg = "Tugasan Baru: {0} Dihasilkan.";
            public const string TaskUpdatedMsg = "Tugasan: {0} Dikemaskini.";
            public const string TaskDeletedMsg = "Tugasan: {0} Dihapuskan.";
            public const string CaseCreatedMsg = "Kes Baru: {0} Dihasilkan.";
            public const string CaseUpdatedMsg = "Kes: {0} Dikemaskini.";
            public const string CaseClosedMsg = "Kes: {0} Ditutup";
            public const string CaseReopenMsg = "Kes: {0} Dibuka Semula.";
            public const string CaseDeletedMsg = "Kes: {0} Dihapuskan.";
            public const string ActivityCreatedMsg = "Aktiviti Baru: {0} Dihasilkan.";
            public const string ActivityUpdatedMsg = "Aktiviti: {0} Dikemaskini.";
            public const string ActivityClosedMsg = "Aktiviti: {0} Ditutup.";
            public const string ActivityReopenMsg = "Aktiviti: {0} Dibuka Semula.";
            public const string ActivityDeletedMsg = "Aktiviti: {0} Dihapuskan.";
            public const string CaseAssignmentCreatedMsg = "Pengagihan Kes: {0} Diagihkan.";
            public const string CaseAssignmentUpdatedMsg = "Pengagihan Kes: {0} Dikemaskini.";
            public const string CaseAssignmentRecallMsg = "Pengagihan Kes: {0} Recalled.";
            public const string CaseAssignmentReturnMsg = "Pengagihan Kes: {0} Dipulangkan.";
            public const string CaseAssignmentClosedMsg = "Pengagihan Kes: {0} Ditutup.";
            public const string CaseAssignmentReopenMsg = "Pengagihan Kes: {0} Dibuka Semula.";
            public const string ActivityAssignmentCreatedMsg = "Pengagihan Aktiviti: {0} Diagihkan.";
            public const string ActivityAssignmentUpdatedMsg = "Pengagihan Aktiviti: {0} Dikemaskini.";
            public const string ActivityAssignmentRecallMsg = "Pengagihan Aktiviti: {0} Ditarik Balik.";
            public const string ActivityAssignmentReturnMsg = "Pengagihan Aktiviti: {0} Dipulangkan.";
            public const string ActivityAssignmentClosedMsg = "Pengagihan Aktiviti: {0} Ditutup.";
            public const string ActivityAssignmentReopenMsg = "Pengagihan Aktiviti: {0} Dibuka Semula.";
            public const string TaskAlertForCase = "{0} has been assigned to you.";
            public const string TaskAlertForActivity = "{0} has been assigned to you.";
            public const string TaskAlertForCaseDailySummaryBlmSelesai = "Kes Belum Selesai ({0}) has met daily threshold.";
            public const string TaskAlertForTaskDue = "{0} due in {1} days.";
            public const string TaskAlertForTask = "{0} has been assigned to you.";
            public const string TaskAlertForOutbound = "Outbound Profile has been assigned to you";
            public const string TaskAlertForOutboundPayDue = "{0} due in {1} days";
            public const string TaskAlertForOutboundImport = "New Outbound {0} has been imported.";
            public const string TaskAlertForInboundImport = "New HCL list has been imported.";
        }

        public class AuditAdditionalInfo
        {
            public const string Case = "Username={0}, UserID={1}, CaseID={2}";
            public const string CaseCatatan = "Username={0}, UserID={1}, CaseID={2}, CaseCatatanID={3}";
            public const string CaseWorkflowAction = "Username={0}, UserID={1}, CaseID={2}, CaseCatatanID={3}";
            public const string Task = "Username={0}, UserID={1}, TaskID={2}";
            public const string Activity = "Username={0}, UserID={1}, ActivityID={2}";
            public const string ActivitySendEmail = "Aliran Keluar Actiivty : Hantar Email dan Tutup Activity. Username={0}, UserID={1}, ActivityID={2}";
        }

        public class ExceptionMessages
        {
            public const string TPProfileAccess = "Unauthorized to view Tax Payer profile with TPID : {0}";
            public const string NoUserLoginAccess = "Unauthorized to access CRM : {0}";
        }

        public class Exception
        {
            public const string UpdateConflict = "UpdateConflict";
            public const string RouteToAgent = "RouteToAgent";
        }

        public enum StatusLevel2
        {
            Normal = 6,
            Sepenuhnya_Muktamad = 1
        }

        public enum StatusLevel1
        {
            Selesai = 1,
            BelumSelesai = 2
        }

        public class Status
        {
            public const string BelumSelesai = "Belum Selesai";
            public const string Selesai = "Selesai";
        }

        public class LookupCode
        {
            public const string BahasaPehubungan = "BahasaPehubungan";
            public const string JenisPelanggan = "JenisPelanggan";
            public const string StatusBayaranS104S22 = "StatusBayaranS104S22";
            public const string CCCampaign = "CCCampaign";
            public const string DMSStatus = "DMSStatus";
            public const string ReturnedReason = "ReturnedReason";
            public const string Tahap = "Tahap";
            public const string KategoriPenyelesaian = "KategoriPenyelesaian";
            public const string CCCampaignHCL = "CCCampaignHCL";
            public const string CCFromEmail = "CCFromEmail";
            public const string CCFromSMS = "CCFromSMS";
            public const string UsrJawatan = "Jawatan";
        }

        public enum KempenKategori
        {
            KesAnsuran = 23,
            KesTunggakan = 24,
            KesCTL = 25,
            KempenHCL = 26
        }

        public enum HierarchyType
        {
            Timbalan = 34,
            Jabatan = 35,
            Cawangan = 36,
            Unit = 37
        }

        public enum UnitTypeID
        {

            UTH = 87

        }

        public enum TaskStatus
        {
            Open = 261,
            Completed = 262
        }

        public class Aliran
        {
            public const string Inbound = "IN";
            public const string Outbound = "OUT";
        }

        //public class TemplateType
        //{
        //    public const string General = "A";
        //    public const string EFiling = "B";
        //    public const string System = "S"; 
        //}

        public enum OutboundStatus
        {
            Baru = 27,
            [Description("Ditolak/Dipulangkan")]
            DitolakDipulangkan = 28,
            Dijadualkan = 29,
            [Description("In Queue")]
            InQueue = 30,
            [Description("Called/Sent")]
            Called = 31,
            ReadyToUpdateReMS = 32,
            Closed = 33,
            Disahkan = 39,
            [Description("Not Yet Call")]
            NotYetCall = 42,
            [Description("Called and Rescheduled")]
            CalledAndRescheduled = 43,
            [Description("Cancelled by Batch")]
            CancelledByBatch = 46,
            Sent = 47,
            [Description("Not Sent")]
            NotSent = 48,
            [Description("Cancelled from CC")]
            CancelledFromCC = 49

        }

        public class System
        {
            public const string Name = "SYSTEM";

            public const string ContactCentre = "CONTACT CENTRE";
            public const string CFF = "CFF";
            public const string CFFEmail = "cff@hasil.gov.my";
        }

        public class AnsuranStaticOption
        {
            public const string Sendiri = "Sendiri";
            public const int SendiriID = 0;
        }

        public class ReMSAssignRemarks
        {
            public const string AssignedThroughCC = "Activity is assigned through Contact Center";
            public const string AutoPickedUp = "Auto Picked Up";
        }


        public enum LookupParamSys
        {
            AssignToTypeBranch = 19,
            AssignToTypeUnit = 20,
            AssignToTypeUser = 21,
            AssignToTypeRole = 22,
            HierarchyTypeSeksyen = 34,
            HierarchyTypeJabatan = 35,
            HierarchyTypeCawangan = 36,
            HierarchyTypeUnit = 37
        }

        public enum ActChannel
        {
            CFF = 8
        }

        public enum TPFileTypeID
        {
            SG = 1,
            C = 2,
            E = 3,
            FA = 4,
            TP = 5,
            D = 6
        }

        public class WebRequest
        {
            public const string InvalidRequestMsg = "The request is invalid.";
            public const string DuplicateRecordMsg = "Duplicate records Found.";
            public const string NoRecordMsg = "No record Found";
            public const string InternalError = "Internal Error Occured";
        }

        public enum LanguageType
        {
            None = 0,
            BM = 1,
            BI = 2
        }

        #region Console App Constants
        public class ExtractUpdatedTPInfo
        {
            public const string DateTimeFormat = "LHDN.CRM.TPFile.DateTimeFormat";
            public const string TPFilePath = "LHDN.CRM.TPFile.Path";
            public const string TPFileName = "LHDN.CRM.TPFile.Name";
            public const string TPFileFormat = "LHDN.CRM.TPFile.Format";
        }


        public class AppLog
        {
            public const string LogEnabled = "LHDN.CRM.Log.Enabled";
            public const string LogPath = "LHDN.CRM.Log.Path";
            public const string LogName = "LHDN.CRM.Log.LogName";
            public const string LogDateTimeFormat = "LHDN.CRM.Log.DateTimeFormat";
        }
        #endregion
    }
}
