// GET: Physicians/Create
        public IActionResult Create()
        {
            CreatePolicyHolderViewModel vm = new CreatePolicyHolderViewModel();

            vm.CurrentPolicyHolder = new PolicyHolder();
            var codes = from p in _policyContext.Policies select p.PolicyCode;

            vm.Policies = GetSelectListItems(codes);
            return(View(vm));
        }
        public async Task <IActionResult> Create(CreatePolicyHolderViewModel vm)
        {
            HttpContext.Session.SetString(HomeController.CreatePolicyHolderNameValidation, "");
            HttpContext.Session.SetString(HomeController.CreatePolicyHolderAddressValidation, "");
            HttpContext.Session.SetString(HomeController.CreatePolicyHolderPronounsValidation, "");
            HttpContext.Session.SetString(HomeController.CreatePolicyHolderPolicyCodeValidation, "");
            HttpContext.Session.SetString(HomeController.CreatePolicyHolderDOBValidation, "");
            HttpContext.Session.SetString(HomeController.CreatePolicyHolderStartValidation, "");
            HttpContext.Session.SetString(HomeController.CreatePolicyHolderEndValidation, "");

            var codes = from p in _policyContext.Policies select p.PolicyCode;

            vm.Policies = GetSelectListItems(codes);
            if (string.IsNullOrEmpty(vm.CurrentPolicyHolder.Name))
            {
                HttpContext.Session.SetString(HomeController.CreatePolicyHolderNameValidation, "Required Field");
                return(View(vm));
            }
            if (vm.CurrentPolicyHolder.DateOfBirth == DateTime.MinValue)
            {
                HttpContext.Session.SetString(HomeController.CreatePolicyHolderDOBValidation, "Required Field");
                return(View(vm));
            }
            if (string.IsNullOrEmpty(vm.CurrentPolicyHolder.Pronouns))
            {
                HttpContext.Session.SetString(HomeController.CreatePolicyHolderPronounsValidation, "Required Field");
                return(View(vm));
            }
            if (string.IsNullOrEmpty(vm.CurrentPolicyHolder.Address))
            {
                HttpContext.Session.SetString(HomeController.CreatePolicyHolderAddressValidation, "Required Field");
                return(View(vm));
            }
            if (string.IsNullOrEmpty(vm.CurrentPolicyHolder.PolicyCode))
            {
                HttpContext.Session.SetString(HomeController.CreatePolicyHolderPolicyCodeValidation, "Required Field");
                return(View(vm));
            }
            if (vm.CurrentPolicyHolder.StartDate == DateTime.MinValue)
            {
                HttpContext.Session.SetString(HomeController.CreatePolicyHolderStartValidation, "Required Field");
                return(View(vm));
            }
            if (vm.CurrentPolicyHolder.EndDate == DateTime.MinValue)
            {
                HttpContext.Session.SetString(HomeController.CreatePolicyHolderEndValidation, "Required Field");
                return(View(vm));
            }
            PolicyHolder policyHolder = vm.CurrentPolicyHolder;

            policyHolder.AmountPaid = 0;
            Policy policy = _policyContext.Policies.First(p => p.PolicyCode == policyHolder.PolicyCode);

            policyHolder.PolicyId = policy.Id;
            DateTime currentYear = new DateTime(DateTime.Now.Year, 1, 1);

            if (vm.CurrentPolicyHolder.DateOfBirth >= currentYear)
            {
                HttpContext.Session.SetString(HomeController.CreatePolicyHolderDOBValidation, "Policyholder cannot be born in this year");
                return(View(vm));
            }
            double years = (DateTime.Now - vm.CurrentPolicyHolder.DateOfBirth).TotalDays / 365.25;

            if (years > policy.AgeLimit)
            {
                HttpContext.Session.SetString(HomeController.CreatePolicyHolderDOBValidation, "Policyholder is too old for this policy");
                return(View(vm));
            }
            if (vm.CurrentPolicyHolder.StartDate < DateTime.Now)
            {
                HttpContext.Session.SetString(HomeController.CreatePolicyHolderStartValidation, "Start date cannot be before today");
                return(View(vm));
            }
            if (vm.CurrentPolicyHolder.StartDate > vm.CurrentPolicyHolder.EndDate)
            {
                HttpContext.Session.SetString(HomeController.CreatePolicyHolderEndValidation, "End date cannot be before start date");
                return(View(vm));
            }
            policyHolder.AmountRemaining = policy.MaxCoverage;
            _policyHolderContext.Add(policyHolder);
            await _policyHolderContext.SaveChangesAsync();

            return(RedirectToAction(nameof(Index)));
        }