#include <iostream>
#include <string>
#include <fstream>

using namespace std;

int bookAppointment()
{
    system("clear");

    cout<<"\n ----- Book Your Appointment ---- \n";
    cout<<"\n ----- Available slots ---- \n";

    ifstream read;
    read.open("appointment.dat");

    string arr[13] = {"0","0","0","0","0","0","0","0","0","0","0","0","0"};
    int recordFound =0;

    if(read)
    {
        string line;

        while(getline(read, line)) {
            char temp = line[0];
            int index = (temp - 65);
            arr[index] = line.substr(2);
            recordFound = 1;
        }
        if(recordFound == 1)
        {
            cout<<"\n Appointment Summary by hours:";
            char key = 'A';
            int hours = 9;
            for(int i = 0; i<=12; i++)
            {
                if(i == 0){
                    if(arr[i] == "0")
                        cout<<"\n "<<key<<"-> 0"<<hours<<" - Available";
                    else
                        cout<<"\n "<<key<<"-> 0"<<hours<<" - Booked by "<< arr[i];
                }

                else
                {
                    if(arr[i] == "0")
                        cout<<"\n "<<key<<"->"<<hours<<" - Available";
                    else
                        cout<<"\n "<<key<<"->"<<hours<<" - Booked by "<< arr[i];
                }
                hours++; key++;
            }

        }

        read.close();
    }
    if(recordFound == 0){
        cout<<"\n Appointment Available for following hours :";
        char key = 'A';
        for(int i = 9; i<=21; i++)
        {
            if(i==9)
                cout<<"\n "<<key<<" -> 0"<<i<<" - Available";
            else
                cout<<"\n "<<key<<" -> "<<i<<" - Available";
            key++;
        }

    }

    char choice;
    cout<<"\n\n Input your choice : ";
    cin>>choice;

    if( !(choice >= 'A' && choice <='Z'))
    {
        cout<<"\n Error : Invalid Selection";
        cout<<"\n Please selection correct value from menu A- Z";
        cout<<"\n Press any key to continue";
        getchar();getchar();
        system("clear");
        bookAppointment();
    }

    int index = (choice-65 );
    int isBooked = 1;
    if(arr[index] == "0")
        isBooked = 0;

    if(isBooked ==1)
    {
        cout<<"\n Error : Appointment is already booked for this Hour";
        cout<<"\n Please select different time !!";
        cout<<"\n Press any key to continue!!";
        getchar();getchar();
        system("clear");
        bookAppointment();
    }

    string name;
    cout<<"\n Enter your first name:";
    cin>>name;

    ofstream out;
    out.open("appointment.dat", ios::app);

    if(out){
        out<<choice<<":"<<name.c_str()<<"\n";
        out.close();
        cout<<"\n Appointment booked for Hours : "<< (choice-65) + 9 <<" successfully !!";
    } else {
        cout<<"\n Error while saving booking";
    }

    cout<<"\n Please any key to continue..";
    getchar(); getchar();
    return 0;
}

int existingAppointment()
{
    system("clear");
    cout<<"\n ----- Appointments Summary ---- \n";
    //check if record already exist..
    ifstream read;
    read.open("appointment.dat");

    string arr[13] = {"0","0","0","0","0","0","0","0","0","0","0","0","0"};
    int recordFound =0;

    if(read)
    {
        string line;
        while(getline(read, line)) {
            char temp = line[0];
            int index = (temp - 65);

            arr[index]= line.substr(2);
            recordFound = 1;
        }
        if(recordFound == 1)
        {
            cout<<"\n Appointment Summary by hours:";
            char key = 'A';
            int hours = 9;
            for(int i = 0; i<=12; i++)
            {
                if(arr[i] == "0")
                    cout<<"\n "<<key<<"->"<<hours<<" - Available";
                else
                    cout<<"\n "<<key<<"-> 0"<<hours<<" - Booked by "<< arr[i];
                hours++; key++;
            }

        }

        read.close();
    }
    else
    {
        char key = 'A';
        for(int i = 9; i<=21; i++)
        {
            if(i==9)
                cout<<"\n "<<key<<" -> 0"<<i<<" - Available";
            else
                cout<<"\n "<<key<<" -> "<<i<<" - Available";
            key++;
        }
    }

    cout<<"\n Please any key to continue..";
    getchar(); getchar();
    return 0;
}



int main() {
    while(1)
    {
        system("clear");
        cout<<"\tDoctor Appointment System\n";
        cout<<"----------------------------------------\n\n";

        cout<<"1. Book Appointment\n";
        cout<<"2. Check Existing Appointment\n";
        cout<<"0. Exit\n";
        int choice;

        cout<<"\n Enter you choice: ";
        cin>>choice;

        switch(choice)
        {
            case 1:
                bookAppointment();
                break;
            case 2:
                existingAppointment();
                break;
            case 0:
                while(1)
                {
                    system("clear");
                    cout<<"\n Are you sure, you want to exit? y | n \n";
                    char ex;
                    cin>>ex;
                    if(ex == 'y' || ex == 'Y') {
                        exit(0);
                    } else if(ex == 'n' || ex == 'N'){
                        break;
                    } else{
                        cout<<"\n Invalid choice !!!";
                        getchar();
                    }
                }
                break;

            default: cout<<"\n Invalid choice. Enter again ";
                getchar();

        }

    }
}   
