def delete_combo():

  """

  Funcion que permite eliminar combos del menu

  """


  combo_file = "restaurant_combos.txt"
  count_combos = fm.check_empty(combo_file)
  if count_combos:
    combos = []
  else:
    combos = fm.fill_combos(combo_file)

  delete_answer = '1'

  while delete_answer == '1':
    if len(combos) == 0:

      print('No hay platos en el menu')
      delete_answer = '0'

    else:
      product_answer = select_product(combos)

      selected_combo = combos[product_answer-1]

      combos.remove(selected_combo)

      fm.create_combos_txt(combos,combo_file)

      delete_answer = input('Presione 1 si desea eliminar otro elemento: ')
def restaurants_most_sells():
    """
  Funcion muestra los 5 productos mas vendidos del restaurante
  
  """

    dish_file = "restaurant_dishes.txt"
    count_dishes = fm.check_empty(dish_file)
    if count_dishes:
        dishes = []
    else:
        dishes = fm.fill_dishes(dish_file)

    combo_file = "restaurant_combos.txt"
    count_combos = fm.check_empty(combo_file)
    if count_combos:
        combos = []
    else:
        combos = fm.fill_combos(combo_file)

    count_sells = fm.check_empty("sold_dishes.txt")

    if count_sells:

        print('Por el momento no hay productos vendidos')

    else:

        sells = []

        with open("sold_dishes.txt") as f:
            for line in f:
                sell = line[:-1]

                sells.append(sell)

        sells_quantities = []
        if len(dishes) != 0:
            for i in range(len(dishes)):

                product_quantity = sells.count(dishes[i].name)
                lista = []
                lista.append(dishes[i].name)
                lista.append(product_quantity)

                sells_quantities.append(lista)

        if len(combos) != 0:
            for i in range(len(combos)):

                product_quantity = sells.count(combos[i].name)
                lista = []
                lista.append(combos[i].name)
                lista.append(product_quantity)

                sells_quantities.append(lista)

                sells_quantities.append(lista)
            print(lista)
        if len(sells_quantities) != 0:

            sells_quantities = sort_vector(sells_quantities)
            #print(sells_quantities)
            cont = 0

            index = -1
            print('\nLos productos mas vendidos del restaurante son:\n')

            while cont < len(sells_quantities) and cont < 5 and index > -6:

                print(f'\t{sells_quantities[index][0]}')

                cont += 1
                index -= 1
def sell_products(data_base): 


  """

  Funcion que permite vender productos del menu, y almacenar los datos de la venta en los clientes y almacenar productos vendidos

  """

  cruise_answer = select_cruise(data_base)
  clients_file = "clients_cruise"+str(cruise_answer)+".txt"
  count_clients = fm.check_empty(clients_file)
  if count_clients:
    clients = []
  else:
    clients = fm.fill_clients(clients_file)
    print('Clientes lleno')

  dish_file = "restaurant_dishes.txt"
  count_dishes = fm.check_empty(dish_file)
  if count_dishes:
    dishes = []
  else:
    dishes = fm.fill_dishes(dish_file)


  combo_file = "restaurant_combos.txt"
  count_combos = fm.check_empty(combo_file)
  if count_combos:
    combos = []
  else:
    combos = fm.fill_combos(combo_file)


  while True:
    
    try:
      dni = int(input('Por favor ingrese su dni:'))
      break
    except:
      print('Valor invalido. Intente nuevamente')

  if len(clients) == 0:
    print('No se encuentran clientes hospedados en este crucero')
  else:
    search_dni = search_available(clients,0,dni,2)
    if search_dni == "No encontrado":
      print('El numero de cedula ingresado no se encuentra en la base de datos')
    else:

      if clients[search_dni].room_id == "Salió":
        print('El numero de cedula ingresado no se encuentra en la base de datos')
      else:
        while True:

          try:
            
            search_type = input('Menu:\n1. Platos\n2. Combos\nIndique lo que desea buscar: ')
            if search_type != '1' and search_type != '2':
              raise Exception
            
            break

          except:
            print('Valor invalido. Intente nuevamente')
        if search_type == '1':

          if len(dishes) != 0:

            product_answer = select_product(dishes)
            payment = dishes[product_answer-1].price
            #Se actualiza el dato del cliente para denotar que hizo una compra en el restaurante
            clients[search_dni].restaurant += payment

            #Se crea un archivo que almacene los productos vendidos
            fm.create_client_txt(clients,clients_file)

            with open("sold_dishes.txt",'a') as f:

              f.write(f'{dishes[product_answer-1].name}\n')

            bill = f"Nombre: {clients[search_dni].name}\nEdad: {clients[search_dni].age}\nCedula: {clients[search_dni].dni}\nHabitacion: {clients[search_dni].room_id}\nMonto a Pagar: {payment}\nProducto: {dishes[product_answer-1].name} "
            print(bill)
          else:
            print('No hay platos en el menu')

        else:

          if len(combos):

            product_answer = select_product(combos)
            payment = combos[product_answer-1].price
            #Se actualiza el dato del cliente para denotar que hizo una compra en el restaurante
            clients[search_dni].restaurant += payment

            #Se crea un archivo que almacene los productos vendidos
            fm.create_client_txt(clients,clients_file)

            with open("sold_dishes.txt",'a') as f:

              f.write(f'combos[product_answer-1].name\n')

            bill = f"Nombre: {clients[search_dni].name}\nEdad: {clients[search_dni].age}\nCedula: {clients[search_dni].dni}\nHabitacion: {clients[search_dni].room_id}\nMonto a Pagar: {payment}\nProducto: {combos[product_answer-1].name} "
            print(bill)

          print('No se encuentran combos en el menu')
def search_menu():


  """
  Funcion que permite buscar combos en el menu

  """

  dish_file = "restaurant_dishes.txt"
  count_dishes = fm.check_empty(dish_file)
  if count_dishes:
    dishes = []
  else:
    dishes = fm.fill_dishes(dish_file)


  combo_file = "restaurant_combos.txt"
  count_combos = fm.check_empty(combo_file)
  if count_combos:
    combos = []
  else:
    combos = fm.fill_combos(combo_file)
  search_continue = '1'

  while search_continue == '1':
    while True:

      try:
        
        search_type = input('Menu:\n1. Platos\n2. Combos\nIndique lo que desea buscar: ')
        if search_type != '1' and search_type != '2':
          raise Exception
        search_criteria = input('\nParametros de busqueda:\n1. Nombre\n2. Rango de precios\nSeleccione el parametro de busqueda que desea realizar: ')

        if search_criteria != '1' and search_criteria != '2':
          raise Exception

        break

      except:
        print('Valor invalido. Intente nuevamente')

    if search_criteria == '1':
      if search_type == '1':
        if len(dishes) == 0:
          print('No hay platos en el menu')
          search_continue = input('Presione 1 si desea realizar otra busqueda: ')
        else:
          while True:
            try:
              name = input('Ingrese el nombre del producto que desea buscar: ').title()
              break
            except:
              print('Valor Invalido. Intente nuevamente')
          name_index = search_available(dishes,0,name,6)

          if name_index == "No encontrado":
            print('El producto ingresado no se encuentra en el menu')
            search_continue = input('Presione 1 si desea realizar otra busqueda: ')
          else:
            print(f'\nProducto: {dishes[name_index].name}\nClasificación: {dishes[name_index].clasification}\nPrecio: {dishes[name_index].price}\n\n')
            search_continue = input('Presione 1 si desea realizar otra busqueda: ')
      else:
        if len(combos) == 0:
          print('No hay platos en el menu')
          search_continue = input('Presione 1 si desea realizar otra busqueda: ')
        else:
          while True:
            try:
              name = input('Ingrese el nombre del combo que desea buscar: ').title()
              break
            except:
              print('Valor Invalido. Intente nuevamente')
          name_index = search_available(dishes,0,name,6)

          if name_index == "No encontrado":
            print('El producto ingresado no se encuentra en el menu')
            search_continue = input('Presione 1 si desea realizar otra busqueda: ')
          else:
            print(f'\nProducto: {combos[name_index].name}\nProductos: {combos[name_index].products}\nPrecio: {combos[name_index].price}\n\n')
            search_continue = input('Presione 1 si desea realizar otra busqueda: ')
    else:
      while True:

        try:

          low = float(input('Por favor introduzca el limite inferior del rango de precios: '))
          high = float(input('Por favor introduzca el limite superior del rango de precios: '))
          break
        except:

          print('Valor invalido. Intente nuevamente')


      if search_type == '1':
        if len(dishes) != 0:
          cont = 0
          for i in range(len(dishes)):

            if dishes[i].price >= low and dishes[i].price <= high:

              print(f'\nProducto: {dishes[i].name}\nClasificación: {dishes[i].clasification}\nPrecio: {dishes[i].price}\n\n')
              cont +=1

          if cont == 0:
            print('No se encontraron productos en ese rango de precios')
            search_continue = input('Presione 1 si desea realizar otra busqueda: ')
          else:
            search_continue = input('Presione 1 si desea realizar otra busqueda: ')
        else:

          print('No hay platos en el menu')
          search_continue = input('Presione 1 si desea realizar otra busqueda: ')

      else:
        if len(combos) != 0:
          cont = 0
          for i in range(len(combos)):

            if combos[i].price >= low and combos[i].price <= high:

              print(f'\nProducto: {combos[i].name}\nClasificación: {combos[i].products}\nPrecio: {combos[i].price}\n\n')
              cont +=1

          if cont == 0:
            print('No se encontraron combos en ese rango de precios')
            search_continue = input('Presione 1 si desea realizar otra busqueda: ')
          else:
            search_continue = input('Presione 1 si desea realizar otra busqueda: ')

        else:

          print('No hay combos en el menu')
          search_continue = input('Presione 1 si desea realizar otra busqueda: ')
def create_combo():


  """

  Funcion que permite agregar combos al menu 

  """

  #Primero se valida si existe un archivo con los datos de platos en el menu, de ser asi se llena una lista con los datos guardados en el mismo, de lo contrario se crea la lista vacía

  dish_file = "restaurant_dishes.txt"
  count_dishes = fm.check_empty(dish_file)
  if count_dishes:
    dishes = []
  else:
    dishes = fm.fill_dishes(dish_file)

  #Primero se valida si existe un archivo con los datos de platos en el menu, de ser asi se llena una lista con los datos guardados en el mismo, de lo contrario se crea la lista vacía
  combo_file = "restaurant_combos.txt"
  count_combos = fm.check_empty(combo_file)
  if count_combos:
    combos = []
  else:
    combos = fm.fill_combos(combo_file)
  
  
  

  if len(dishes) == 0:

    print("No hay productos en el menu")
  else:
    
    more_dishes = '1'
    combo_products = ""
    count = 1
    
    while more_dishes == '1':
      print("Seleccione el producto que desea agregar al combo\n")
      dish_answer = select_product(dishes)
      combo_products += f"{dishes[dish_answer-1].name}\t"
      

      if count >= 2:
        
        more_dishes = input('\nPresione 1 si desea agregar mas productos al combo')
      count += 1
    
    while True:
      try:
        name = input('Introduzca el nombre del combo: ').title()

        price = float(input('Introduzca el precio del producto: '))
        

        break

      except:

        print('Valor invalido. Intente nuevamente')
    price *= 1.16

    

    combo = Combo(name,price,combo_products)
    combos.append(combo)
    fm.create_combos_txt(combos,combo_file)