import random
import datetime


# program by Jaylu 😉

# Global List Declaration
patname = []
phno = []
add = []
admit = []
discharge = []
ward = []
fees = []
rc = []
p = []
wardno = []
patid = []
day = []

# Global Vaariable Declaration

i = 0


# Home Function



def Home():
    print('\n')
    print("-_|-_|-_|-_|-_|-_|-_|-_|-_|-_|-_|-_|-_|-_|-_|-_|-_|-_|-_|-_|-_|-_|-_|-_|-_|-_|-_|-_|")
    print("-_|-_|-_|-_|-_|-_|-_|-_|-_|-_|-_|WELCOME TO HOSPITAL XYZ|-_|-_|-_|-_|-_|-_|-_|-_|-_|-_|")
    print("-_|-_|-_|-_|-_|-_|-_|-_|-_|-_|-_|-_|-_|-_|-_|-_|-_|-_|-_|-_|-_|-_|-_|-_|-_|-_|-_|-_|\n")
    print('\n')
    print('\t\t--------------\n')
    print("\t\t1 Admit\n")
    print('\t\t--------------\n')
    print("\t\t2 Ward Info\n")
    print('\t\t--------------\n')
    print("\t\t3 Ward service (Menu Card)\n")
    print('\t\t--------------\n')
    print("\t\t4 Payment\n")
    print('\t\t--------------\n')
    print("\t\t5 Record\n")
    print('\t\t--------------\n')
    print("\t\t0 Exit\n")
    print('\t\t--------------\n')

    ch = int(input("->"))

    if ch == 1:
        print(" ")
        Admit()

    elif ch == 2:
        print(" ")
        Ward_Info()

    elif ch == 3:
        print(" ")
        ward_service()

    elif ch == 4:
        print(" ")
        Payment()

    elif ch == 5:
        print(" ")
        Record()

    else:
        exit()

    # Function used in booking


def date(c):
    if c[2] >= 0 and c[2] <= 10000000000000000000:

        if c[1] != 0 and c[1] <= 12:

            if c[1] == 2 and c[0] != 0 and c[0] <= 31:

                if c[2] % 4 == 0 and c[0] <= 29:
                    pass

                elif c[0] < 29:
                    pass

                else:
                    print("Invalid date\n")
                    patname.pop(i)
                    phno.pop(i)
                    add.pop(i)
                    admit.pop(i)
                    discharge.pop(i)
                    admit()
                # if month is odd & less than equal
            # to 7th month
            elif c[1] <= 7 and c[1] % 2 != 0 and c[0] <= 31:
                pass

            # if month is even & less than equal to 7th
            # month and not 2nd month
            elif c[1] <= 7 and c[1] % 2 == 0 and c[0] <= 30 and c[1] != 2:
                pass

            # if month is even & greater than equal
            # to 8th month
            elif c[1] >= 8 and c[1] % 2 == 0 and c[0] <= 31:
                pass

            # if month is odd & greater than equal
            # to 8th month
            elif c[1] >= 8 and c[1] % 2 != 0 and c[0] <= 30:
                pass

            else:
                print("Invalid date\n")
                patname.pop(i)
                phno.pop(i)
                add.pop(i)
                admit.pop(i)
                discharge.pop(i)
                admit()

        else:
            print("Invalid date\n")
            patname.pop(i)
            phno.pop(i)
            add.pop(i)
            admit.pop(i)
            discharge.pop(i)
            admit()

    else:
        print("Invalid date\n")
        patname.pop(i)
        phno.pop(i)
        add.pop(i)
        admit.pop(i)
        discharge.pop(i)
        admit()

    # admit fucntion




def Admit():
    # used global keyword to
    # use global variable 'i'
    global i
    print(" admit wards")
    print(" ")

    while 1:
        n = str(input("patName: "))
        p1 = str(input("Phone No.: "))
        a = str(input("Address: "))

        # checks if any field is not empty
        if n != "" and p1 != "" and a != "":
            patname.append(n)
            add.append(a)
            break

        else:
            print("\tpatName, Phone no. & Address cannot be empty..!!")
    cii = str(input("admit: "))
    admit.append(cii)
    cii = cii.split('/')
    ci = cii
    ci[0] = int(ci[0])
    ci[1] = int(ci[1])
    ci[2] = int(ci[2])
    date(ci)

    coo = str(input("discharge: "))
    discharge.append(coo)
    coo = coo.split('/')
    co = coo
    co[0] = int(co[0])
    co[1] = int(co[1])
    co[2] = int(co[2])

    # checks if discharge date falls after
    # admit date
    if co[1] < ci[1] and co[2] < ci[2]:

        print("\n\tErr..!!\n\tdischarge date must fall after admit\n")
        patname.pop(i)
        add.pop(i)
        admit.pop(i)
        discharge.pop(i)
        admit()
    elif co[1] == ci[1] and co[2] >= ci[2] and co[0] <= ci[0]:

        print("\n\tErr..!!\n\tdischarge date must fall after admit\n")
        patname.pop(i)
        add.pop(i)
        admit.pop(i)
        discharge.pop(i)
        admit()
    else:
        pass

    date(co)
    d1 = datetime.datetime(ci[2], ci[1], ci[0])
    d2 = datetime.datetime(co[2], co[1], co[0])
    d = (d2 - d1).days
    day.append(d)

    print("\n\t\t ----SELECT WARD TYPE---- \n")

    print(" 1. General Ward")
    print(" 2. Standard AC")
    print(" 3. 3-Bed AC")
    print(" 4. ICU")
    print((" *Press 0 for Ward Fees*"))

    ch = int(input("->"))

    # if-conditions to display alloted ward
    # type and it's fees
    if ch == 0:
        print(" 1. General Ward - Rs. 3500")
        print(" 2. Standard AC - Rs. 4000")
        print(" 3. 3-Bed AC - Rs. 4500")
        print(" 4. ICU - Rs. 5000")
        ch = int(input("->"))
    if ch == 1:
        ward.append('General Ward')
        print("Ward Type- General Ward")
        fees.append(3500)
        print("fees- 3500")
    elif ch == 2:
        ward.append('Standard AC')
        print("Ward Type- Standard AC")
        fees.append(4000)
        print("fees- 4000")
    elif ch == 3:
        ward.append('3-Bed AC')
        print("Ward Type- 3-Bed AC")
        fees.append(4500)
        print("fees- 4500")
    elif ch == 4:
        ward.append('ICU')
        print("Ward Type- ICU")
        fees.append(5000)
        print("fees- 5000")
    else:
        print(" Wrong choice..!!")

    # randomly generating ward no. and pateint
    # id for pateint
    rn = random.randrange(40) + 300
    pid = random.randrange(40) + 10

    # checks if alloted ward no. & pateint
    # id already not alloted
    while rn in wardno or pid in patid:
        rn = random.randrange(60) + 300
        pid = random.randrange(60) + 10

    rc.append(0)
    p.append(0)

    if p1 not in phno:
        phno.append(p1)
    elif p1 in phno:
        for n in range(0, i):
            if p1 == phno[n]:
                if p[n] == 1:
                    phno.append(p1)
    elif p1 in phno:
        for n in range(0, i):
            if p1 == phno[n]:
                if p[n] == 0:
                    print("\tPhone no. already exists and payment yet not done..!!")
                    patname.pop(i)
                    add.pop(i)
                    admit.pop(i)
                    discharge.pop(i)
                    admit()
    print("")
    print("\t\t        ***WARD ASSIGNED SUCCESSFULLY***\n")
    print("======================= Ward No:-", rn, '=======================')
    print("===================== Pateint Id:-", pid, '======================\n')
    print('-_|-_|-_|-_|-_|-_|-_|-_||| THANK YOU |||-_|-_|-_|-_|-_|-_|-_|\n')
    wardno.append(rn)
    patid.append(pid)
    i = i + 1
    n = int(input("0-BACK\n ->"))
    if n == 0:
        Home()
    else:
        discharge()

    # WARD INFO


def Ward_Info():
    print("		 ------HOSPITAL WARD INFO ------")
    print("")
    print("GENERAL WARD")
    print("---------------------------------------------------------------")
    print("Room amenities include: 1 Double Bed, Television, Telephone,")
    print("Double-Door Cupboard, 1 Coffee table with 2 sofa, Balcony and")
    print("an attached washroom with hot/cold water.\n")
    print("STANDARD NON-AC")
    print("---------------------------------------------------------------")
    print("Room amenities include: 1 Double Bed, Television, Telephone,")
    print("Double-Door Cupboard, 1 Coffee table with 2 sofa, Balcony and")
    print("an attached washroom with hot/cold water + Window/Split AC.\n")
    print("3-Bed NON-AC")
    print("---------------------------------------------------------------")
    print("Room amenities include: 1 Double Bed + 1 Single Bed, Television,")
    print("Telephone, a Triple-Door Cupboard, 1 Coffee table with 2 sofa, 1")
    print("Side table, Balcony with an Accent table with 2 Chair and an")
    print("attached washroom with hot/cold water.\n")
    print("3-Bed AC")
    print("---------------------------------------------------------------")
    print("Room amenities include: 1 Double Bed + 1 Single Bed, Television,")
    print("Telephone, a Triple-Door Cupboard, 1 Coffee table with 2 sofa, ")
    print("1 Side table, Balcony with an Accent table with 2 Chair and an")
    print("attached washroom with hot/cold water + Window/Split AC.\n\n")
    print()
    n = int(input("0-BACK\n ->"))
    if n == 0:
        Home()
    else:
        discharge()

    #  FUNCTION


def ward_service():
    ph = int(input("Patient Id: "))
    global i
    f = 0
    r = 0
    for n in range(0, i):
        if patid[n]==ph and p[n]==0:
            f = 1
            print("-------------------------------------------------------------------------")
            print("						 Hotel Apex")
            print("-------------------------------------------------------------------------")
            print("						 Menu Card")
            print("-------------------------------------------------------------------------")
            print("\n BEVARAGES							 26 Dal Fry................ 140.00")
            print("----------------------------------	 27 Dal Makhani............ 150.00")
            print(" 1 Regular Tea............. 20.00	 28 Dal Tadka.............. 150.00")
            print(" 2 Masala Tea.............. 25.00")
            print(" 3 Coffee.................. 25.00	 ROTI")
            print(" 4 Cold Drink.............. 25.00	 ----------------------------------")
            print(" 5 Bread Butter............ 30.00	 29 Plain Roti.............. 15.00")
            print(" 6 Bread Jam............... 30.00	 30 Butter Roti............. 15.00")
            print(" 7 Veg. Sandwich........... 50.00	 31 Tandoori Roti........... 20.00")
            print(" 8 Veg. Toast Sandwich..... 50.00	 32 Butter Naan............. 20.00")
            print(" 9 Cheese Toast Sandwich... 70.00")
            print(" 10 Grilled Sandwich........ 70.00	 RICE")
            print("									 ----------------------------------")
            print(" SOUPS								 33 Plain Rice.............. 90.00")
            print("----------------------------------	 34 Jeera Rice.............. 90.00")
            print(" 11 Tomato Soup............ 110.00	 35 Veg Pulao.............. 110.00")
            print(" 12 Hot & Sour............. 110.00	 36 Peas Pulao............. 110.00")
            print(" 13 Veg. Noodle Soup....... 110.00")
            print(" 14 Sweet Corn............. 110.00	 SOUTH INDIAN")
            print(" 15 Veg. Munchow........... 110.00	 ----------------------------------")
            print("									 37 Plain Dosa............. 100.00")
            print(" MAIN COURSE						 38 Onion Dosa............. 110.00")
            print("----------------------------------	 39 Masala Dosa............ 130.00")
            print(" 16 Shahi Paneer........... 110.00	 40 Paneer Dosa............ 130.00")
            print(" 17 Kadai Paneer........... 110.00	 41 Rice Idli.............. 130.00")
            print(" 18 Handi Paneer........... 120.00	 42 Sambhar Vada........... 140.00")
            print(" 19 Palak Paneer........... 120.00")
            print(" 20 Chilli Paneer.......... 140.00	 ICE CREAM")
            print(" 21 Matar Mushroom......... 140.00	 ----------------------------------")
            print(" 22 Mix Veg................ 140.00	 43 Vanilla................. 60.00")
            print(" 23 Jeera Aloo............. 140.00	 44 Strawberry.............. 60.00")
            print(" 24 Malai Kofta............ 140.00	 45 Pineapple............... 60.00")
            print(" 25 Aloo Matar............. 140.00	 46 Butter Scotch........... 60.00")
            print("Press 0 -to end ")
            ch = 1
            while (ch != 0):

                ch = int(input(" -> "))

                # if-elif-conditions to assign item
                # fees listed in menu card
                if ch == 1 or ch == 31 or ch == 32:
                    rs = 20
                    r = r + rs
                elif ch <= 4 and ch >= 2:
                    rs = 25
                    r = r + rs
                elif ch <= 6 and ch >= 5:
                    rs = 30
                    r = r + rs
                elif ch <= 8 and ch >= 7:
                    rs = 50
                    r = r + rs
                elif ch <= 10 and ch >= 9:
                    rs = 70
                    r = r + rs
                elif (ch <= 17 and ch >= 11) or ch == 35 or ch == 36 or ch == 38:
                    rs = 110
                    r = r + rs
                elif ch <= 19 and ch >= 18:
                    rs = 120
                    r = r + rs
                elif (ch <= 26 and ch >= 20) or ch == 42:
                    rs = 140
                    r = r + rs
                elif ch <= 28 and ch >= 27:
                    rs = 150
                    r = r + rs
                elif ch <= 30 and ch >= 29:
                    rs = 15
                    r = r + rs
                elif ch == 33 or ch == 34:
                    rs = 90
                    r = r + rs
                elif ch == 37:
                    rs = 100
                    r = r + rs
                elif ch <= 41 and ch >= 39:
                    rs = 130
                    r = r + rs
                elif ch <= 46 and ch >= 43:
                    rs = 60
                    r = r + rs
                elif ch == 0:
                    pass
                else:
                    print("Wrong Choice..!!")
            print("Total Bill: ", r)

            # updates restaurant charges and then
            # appends in 'rc' list
            r = r + rc.pop(n)
            rc.append(r)
    if f == 0:
        print("Invalid pateint Id")
    n = int(input("0-BACK\n ->"))
    if n == 0:
        Home()
    else:
        exit()

    # PAYMENT FUNCTION


def Payment():
    ph = str(input("Phone Number: "))
    global i
    f = 0

    for n in range(0, i):
        if ph == phno[n]:

            # checks if payment is
            # not already done
            if p[n] == 0:
                f = 1
                print(" Payment")
                print(" --------------------------------")
                print(" MODE OF PAYMENT")

                print(" 1- Credit/Debit Card")
                print(" 2- Paytm/PhonePe")
                print(" 3- Using UPI")
                print(" 4- Cash")
                x = int(input("-> "))
                print("\n Amount: ", (fees[n] * day[n]) + rc[n])
                print("\n		 Pay For xyz")
                print(" (y/n)")
                ch = str(input("->"))

                if ch == 'y' or ch == 'Y':
                    print("\n\n --------------------------------")
                    print("		 Hospital xyz")
                    print(" --------------------------------")
                    print("			 Bill")
                    print(" --------------------------------")
                    print(" Name: ", patname[n], "\t\n Phone No.: ", phno[n], "\t\n Address: ", add[n], "\t")
                    print("\n admit: ", admit[n], "\t\n discharge: ", discharge[n], "\t")
                    print("\n ward Type: ", ward[n], "\t\n wardfees: ", fees[n] * day[n], "\t")
                    print(" Canteen Charges: \t", rc[n])
                    print(" --------------------------------")
                    print("\n Total Amount: ", (fees[n] * day[n]) + rc[n], "\t")
                    print(" --------------------------------")
                    print("		 Thank You")
                    print("		 Take Care :)")
                    print(" --------------------------------\n")
                    p.pop(n)
                    p.insert(n, 1)

                    # pops ward no. and pateint id from list and
                    # later assigns zero at same position
                    wardno.pop(n)
                    patid.pop(n)
                    wardno.insert(n, 0)
                    patid.insert(n, 0)

            else:

                for j in range(n + 1, i):
                    if ph == phno[j]:
                        if p[j] == 0:
                            pass

                        else:
                            f = 1
                            print("\n\tPayment has been Made :)\n\n")
    if f == 0:
        print("Invalid pateint Id")

    n = int(input("0-BACK\n ->"))
    if n == 0:
        Home()
    else:
        exit()

    # RECORD FUNCTION


def Record():
    # checks if any record exists or not
    if phno != []:
        print("\t\t\t\t\t                        *** HOSPITAL RECORD ***\n")
        print(
            "----------------------------------------------------------------------------------------------------------------------")
        print("|\tpatName\t|\tPhone No.\t|\tAddress\t|\tadmit\t|\tdischarge\t|\tward Type\t|\t\tfees\t|")
        print(
            "----------------------------------------------------------------------------------------------------------------------")

        for n in range(0, i):
            print("|\t",patname[n], "\t|\t", phno[n], "\t|\t", add[n], "\t|\t", admit[n], "\t|\t", discharge[n], "\t|\t", ward[n],
                  "\t|\t", fees[n])

        print(
            "----------------------------------------------------------------------------------------------------------------------\n")

    else:
        print("No Records Found")
    n = int(input("0-BACK\n ->"))
    if n == 0:
        Home()

    else:
        exit()

    # Driver Code


Home()
