static void Dischargepayment(List <Patient> patientsList)
 {
     try
     {
         Console.Write("Enter patient ID number: ");
         string pid = Console.ReadLine().ToUpper();
         Console.Write("Date of discharge (DD/MM/YYYY): ");
         string   dod1 = Console.ReadLine();
         DateTime dod  = Convert.ToDateTime(dod1);
         foreach (Patient p in patientsList)
         {
             if (p.Id == pid)
             {
                 Console.WriteLine("Name of patient: {0}", p.Name);
                 Console.WriteLine("ID number: {0}", p.Id);
                 Console.WriteLine("Citizenship status: {0}", p.CitizenStatus);
                 Console.WriteLine("Gender: {0}", p.Gender);
                 Console.WriteLine("Status: {0}", p.Status);
                 Console.WriteLine("\n======Stay ======");
                 Console.WriteLine("Admission Date: {0}", p.Stay.AdmittedDate);
                 Console.WriteLine("Discharge Date: {0}", dod);
                 p.Stay.DischargedDate = dod;
                 p.Stay.IsPaid         = false;
                 int count = 1;
                 foreach (BedStay bs in p.Stay.BedstayList)
                 {
                     DateTime endstaydate = Convert.ToDateTime(bs.EndBedstay);
                     int      daysDiff    = Convert.ToInt32(bs.StartBedstay.Day - endstaydate.Day);
                     Console.WriteLine("\n======Bed # {0} ======", count);
                     Console.WriteLine("Ward number: {0}", bs.Bed.WardNo);
                     Console.WriteLine("Bed number: {0}", bs.Bed.BedNo);
                     Console.WriteLine("Ward Class: {0}", "A");
                     Console.WriteLine("Start of bed stay: {0}", bs.StartBedstay);
                     Console.WriteLine("End of bed stay: {0}", bs.EndBedstay);
                     if (bs.Bed is ClassABed)
                     {
                         ClassABed cab = (ClassABed)bs.Bed;
                         Console.WriteLine("Accompanying Person: {0}", cab.AccompanyingPerson);
                         bs.Bed.CalculateCharges(p.CitizenStatus, daysDiff);
                     }
                     else if (bs.Bed is ClassBBed)
                     {
                         ClassBBed cbb = (ClassBBed)bs.Bed;
                         Console.WriteLine("AirCon: {0}", cbb.AirCon);
                         bs.Bed.CalculateCharges(p.CitizenStatus, daysDiff);
                     }
                     else if (bs.Bed is ClassCBed)
                     {
                         ClassCBed ccb = (ClassCBed)bs.Bed;
                         Console.WriteLine("Avaliable: {0}", ccb.Available);
                         bs.Bed.CalculateCharges(p.CitizenStatus, daysDiff);
                     }
                     Console.WriteLine("Number of days stayed: {0}", daysDiff);
                     count++;
                 }
                 Console.WriteLine("[Press any key to proceed with payment]");
                 Console.ReadKey();
                 Console.WriteLine("\nCommencing payment...\n");
                 if (p is Child)
                 {
                     Child ch = (Child)p;
                     Console.WriteLine("${0} has been deducted from CDA", ch.CdaBalance);
                     double chcost = ch.CalculateCharges();
                     if (ch.CdaBalance > chcost)
                     {
                         ch.CdaBalance -= chcost;
                         chcost         = 0;
                         Console.WriteLine("New CDA balance: ${0}", ch.CdaBalance);
                         Console.WriteLine("Sub-total: ${0} has been paid by cash", chcost);
                         Console.WriteLine("Payment Successful!");
                         p.Stay.IsPaid = true;
                     }
                     else if (ch.CdaBalance < chcost)
                     {
                         chcost       -= ch.CdaBalance;
                         ch.CdaBalance = 0;
                         Console.WriteLine("New CDA balance: ${0}", ch.CdaBalance);
                         Console.WriteLine("Sub-total: ${0} has been paid by cash", chcost);
                         Console.WriteLine("Payment Successful!");
                         p.Stay.IsPaid = true;
                     }
                     else if (ch.CdaBalance == chcost)
                     {
                         chcost        = 0;
                         ch.CdaBalance = 0;
                         Console.WriteLine("New CDA balance: ${0}", ch.CdaBalance);
                         Console.WriteLine("Sub-total: ${0} has been paid by cash", chcost);
                         Console.WriteLine("Payment Successful!");
                         p.Stay.IsPaid = true;
                     }
                     else
                     {
                         Console.WriteLine("Error in calculating Balance");
                     }
                 }
                 else if (p is Adult)
                 {
                     Adult ad = (Adult)p;
                     Console.WriteLine("${0} has been deducted from Medisave", ad.MedisaveBalance);
                     double adcost = ad.CalculateCharges();
                     if (ad.MedisaveBalance > adcost)
                     {
                         ad.MedisaveBalance -= adcost;
                         adcost              = 0;
                         Console.WriteLine("New CDA balance: ${0}", ad.MedisaveBalance);
                         Console.WriteLine("Sub-total: ${0} has been paid by cash", adcost);
                         Console.WriteLine("Payment Successful!");
                         p.Stay.IsPaid = true;
                     }
                     else if (ad.MedisaveBalance < adcost)
                     {
                         adcost            -= ad.MedisaveBalance;
                         ad.MedisaveBalance = 0;
                         Console.WriteLine("New CDA balance: ${0}", ad.MedisaveBalance);
                         Console.WriteLine("Sub-total: ${0} has been paid by cash", adcost);
                         Console.WriteLine("Payment Successful!");
                         p.Stay.IsPaid = true;
                     }
                     else if (ad.MedisaveBalance == adcost)
                     {
                         adcost             = 0;
                         ad.MedisaveBalance = 0;
                         Console.WriteLine("New CDA balance: ${0}", ad.MedisaveBalance);
                         Console.WriteLine("Sub-total: ${0} has been paid by cash", adcost);
                         Console.WriteLine("Payment Successful!");
                         p.Stay.IsPaid = true;
                     }
                     else
                     {
                         Console.WriteLine("Error in calculating Balance");
                     }
                 }
                 else if (p is Senior)
                 {
                     Senior sn = (Senior)p;
                     Console.WriteLine("Total Cost has been reduced by half");
                     double sncost = sn.CalculateCharges();
                     Console.WriteLine("Sub-total: ${0} has been paid by cash", sncost);
                     Console.WriteLine("Payment Successful!");
                     p.Stay.IsPaid = true;
                 }
                 else
                 {
                     Console.WriteLine("Error in Patient (Child/Adult/Senior) Class");
                 }
             }
         }
     }
     catch
     {
         Console.WriteLine("Unable to Discharge or Settle payments");
     }
 }
        static void RegisterPatient(List <Patient> pList)
        {
            string patientdeets;

            Console.Write("Enter Name: ");

            string name = Console.ReadLine();

            Console.Write("Enter Identification Number: ");
            string Idn = Console.ReadLine().ToUpper();

            Console.Write("Enter Age: ");
            int age = 0;

            try
            {
                age = Convert.ToInt32(Console.ReadLine());


                Console.Write("Enter Gender [M/F]: ");
                char gender = Convert.ToChar(Console.ReadLine().ToUpper());
                Console.Write("Enter Citizenship Status [SC/PR/Foreigner]: ");
                string citizenship = Console.ReadLine();

                using (StreamWriter file = new StreamWriter("patients(1).csv", true))
                {
                    if (age <= 12)
                    {
                        //if child is sc create patient child object with cdabalance
                        if (citizenship == "SC")
                        {
                            Console.Write("Enter Child Development Account Balance: ");
                            double  balance = Convert.ToDouble(Console.ReadLine());
                            Patient c1      = new Child(Idn, name, age, gender, citizenship, "Registered", balance);
                            pList.Add(c1);
                            patientdeets = name + "," + Idn + "," + age + "," + gender + "," + citizenship + "," + balance;
                        }
                        //if child is not SC , no cdabalance
                        else
                        {
                            Patient c1 = new Child(Idn, name, age, gender, citizenship, "Registered", 0);
                            pList.Add(c1);
                            patientdeets = name + "," + Idn + "," + age + "," + gender + "," + citizenship;
                        }
                    }
                    else if (age < 64)
                    {
                        if (citizenship == "SC" || citizenship == "PR")
                        {
                            Console.Write("Enter Medisave Balance: ");
                            double  medisave = Convert.ToDouble(Console.ReadLine());
                            Patient a1       = new Adult(Idn, name, age, gender, citizenship, "Registered", medisave);
                            pList.Add(a1);
                            patientdeets = name + "," + Idn + "," + age + "," + gender + "," + citizenship + "," + medisave;
                        }
                        else
                        {
                            Patient a1 = new Adult(Idn, name, age, gender, citizenship, "Registered", 0);
                            pList.Add(a1);

                            patientdeets = name + "," + Idn + "," + age + "," + gender + "," + citizenship;
                        }
                    }
                    else
                    {
                        Patient s1 = new Senior(Idn, name, age, gender, citizenship, "Registered");
                        pList.Add(s1);

                        patientdeets = name + "," + Idn + "," + age + "," + gender + "," + citizenship;
                    }
                    file.WriteLine(patientdeets);
                    Console.WriteLine("{0} is registered successfully", name);
                }
            }
            catch
            {
                Console.WriteLine("{0} is not registered successfully", name);
            }
        }
        //InIt List

        static void InitData(List <Patient> pList, List <Bed> bList)
        {
            // read csv lines from patients
            string[] lines = File.ReadAllLines("patients(1).csv");

            for (int l = 1; l < lines.Length; l++)
            {
                string[] info = lines[l].Split(',');
                if (Convert.ToInt32(info[2]) <= 12)
                {
                    if (info[4] == "SC")
                    {
                        Patient child = new Child(info[1], info[0], Convert.ToInt32(info[2]), Convert.ToChar(info[3]), info[4], "Registered", Convert.ToDouble(info[5]));
                        pList.Add(child);
                    }
                    else
                    {
                        Patient child = new Child(info[1], info[0], Convert.ToInt32(info[2]), Convert.ToChar(info[3]), info[4], "Registered", 0);
                        pList.Add(child);
                    }
                }
                else if (Convert.ToInt32(info[2]) < 64)
                {
                    if (info[4] == "SC" || info[4] == "PR")
                    {
                        Patient adult = new Adult(info[1], info[0], Convert.ToInt32(info[2]), Convert.ToChar(info[3]), info[4], "Registered", Convert.ToDouble(info[5]));
                        pList.Add(adult);
                    }
                    else
                    {
                        Patient adult = new Adult(info[1], info[0], Convert.ToInt32(info[2]), Convert.ToChar(info[3]), info[4], "Registered", 0);
                        pList.Add(adult);
                    }
                }
                else
                {
                    Senior senior = new Senior(info[1], info[0], Convert.ToInt32(info[2]), Convert.ToChar(info[3]), info[4], "Registered");
                    pList.Add(senior);
                }
            }

            //Read from Beds.csv
            try
            {
                string[] sents = File.ReadAllLines("beds.csv");

                for (int l = 1; l < sents.Length; l++)
                {
                    string[] sbed = sents[l].Split(',');
                    if (sbed[0] == "A")
                    {
                        Bed cab = new ClassABed(Convert.ToInt32(sbed[1]), Convert.ToInt32(sbed[2]), Convert.ToDouble(sbed[4]), true);
                        bList.Add(cab);
                    }
                    else if (sbed[0] == "B")
                    {
                        Bed cbb = new ClassBBed(Convert.ToInt32(sbed[1]), Convert.ToInt32(sbed[2]), Convert.ToDouble(sbed[4]), true);
                        bList.Add(cbb);
                    }
                    else if (sbed[0] == "C")
                    {
                        Bed ccb = new ClassCBed(Convert.ToInt32(sbed[1]), Convert.ToInt32(sbed[2]), Convert.ToDouble(sbed[4]), true);
                        bList.Add(ccb);
                    }
                }
            }
            catch
            {
                Console.WriteLine("Unable to Read File/File does not exist");
            }
        }