def make_appointment():
    #  identify patient; choose doctor; show availability; choose availability; remove from doctor's availability; create appointment;
    #  insert appointment
    # identify patient
    print "who is the patient?"
    patient = select_a_patient()
    print "which doctor do you want to schedule an appointment with?"
    doctor = make_a_selection(get_doctor_list())
    selected_availability = select_a_timeslot(doctor)
    appointment = create_appointment(patient, selected_availability)
    print "congrats! you made an appointment."
    print "appointment details:"
    print_dict_list([appointment])
    insert_appointment(appointment)
def select_a_timeslot(doctor):
    # get a list of available time slot of the doctor
    availability_list = []
    cnx = get_connection()
    cursor = cnx.cursor()
    query = (
        "SELECT Doctor_Availability_Id, Day_Of_Week, From_Time, To_Time, Organization.Name, Medical_Office.MedicalOfficeId, Doctor_Availability.Doctor_Id FROM Doctor_Availability "
        "JOIN Affiliation ON Affiliation.Doctor_Id = Doctor_Availability.Doctor_Id "
        "JOIN Medical_Office ON Medical_Office.MedicalOfficeId = Affiliation.MedicalOfficeId "
        "JOIN Organization ON Organization.Org_Id = Medical_Office.MedicalOfficeId "
        "WHERE Doctor_Availability.Doctor_Id = %(Doctor_Id)s"
    )
    cursor.execute(query, doctor)
    for (availability_id, day_of_week, from_time, to_time, medical_office_name, medical_office_id, doctor_id) in cursor:
        availability_list.append(
            {
                "Doctor_Availability_Id": availability_id,
                "Day_Of_Week": day_of_week,
                "From_Time": from_time,
                "To_Time": to_time,
                "medical_office_name": medical_office_name,
                "MedicalOfficeId": medical_office_id,
                "Doctor_Id": doctor_id,
            }
        )
    cursor.close()
    cnx.close()
    # select a time slot
    print "when do you want to see the doctor?"
    selected_availability = make_a_selection(availability_list)
    # delete the selected availabitlity
    cnx = get_connection()
    cursor = cnx.cursor()
    query = "DELETE FROM Doctor_Availability " "WHERE Doctor_Availability_Id = %(Doctor_Availability_Id)s"
    cursor.execute(query, selected_availability)
    cnx.commit()
    cursor.close()
    cnx.close()
    return selected_availability
def select_a_patient():
    """:returns patient """
    patient_list = get_patient_list()
    return make_a_selection(patient_list)