public void StartToIntegration(Enums.Departments targetDepartment)
        {
            if (targetDepartment != Enums.Departments.RD)
            {
                throw new ArgumentException("Only RD can perform integration process");
            }

            ICoding instance = new RD();

            instance.Coding();
        }
        public string GetManagerName(Enums.Departments targetDepartment)
        {
            BaseDepartment department = GetDepartmentInstance(targetDepartment);

            //error because protected set
            //department.Manager = Enums.Managers.Jay;

            //but you can callback this function to set up new manager
            //string errorMsg = "";
            //var result = department.SetManager(Enums.PEDInternalMembers.Tarien, Enums.Managers.Klen, out errorMsg);

            return(department.Manager.ToString());
        }
        public string GetDepartmentInfo(Enums.Departments targetDepartment)
        {
            BaseDepartment department  = GetDepartmentInstance(targetDepartment);
            var            information = new JObject
            {
                { "Supervisor", department.Supervisor.ToString() },
                { "Manager", department.Manager.ToString() },
                { "TeamMemberCount", department.GetTeamMemberCount() },
                { "TeamMembers", department.GetTeamMembers().Aggregate((result, next) => $"{result},{next}") },
                { "TeamAssets", department.GetAssetsItems().Aggregate((result, next) => $"{result},{next}") }
            };

            return(information.ToString(Newtonsoft.Json.Formatting.None));
        }
        public void ExplainServiceLogin(Enums.Departments targetDepartment)
        {
            IExplainServiceLogic service = null;

            if (targetDepartment == Enums.Departments.PD)
            {
                service = new PD();
            }
            else if (targetDepartment == Enums.Departments.RD)
            {
                service = new RD();
            }

            if (service != null)
            {
                service.ExplainServiceLogic();
            }
            else
            {
                throw new NotImplementedException("Only RD and PD know the logic");
            }
        }
        private BaseDepartment GetDepartmentInstance(Enums.Departments targetDepartmernt)
        {
            BaseDepartment department = null;

            switch (targetDepartmernt)
            {
            case Enums.Departments.RD:
                department = new RD(Enums.Managers.Klen);
                break;

            case Enums.Departments.PD:
                department = new PD();
                break;

            case Enums.Departments.CPD:
                department = new CPD();
                break;

            default:
                throw new NotImplementedException("Sorry, we didn't build this department instance");
            }
            return(department);
        }