def verMesa(listajugadores, listabanca):
    prints.mesa()
    verBanca(listabanca)
    for i in listajugadores:
        if listabanca[2] > 21 and i[
                4] <= 21:  #Determinar si el jugador ha ganado o perdido en funcion de si su puntuacion no supera
            estado = "GANADOR/A"  #21 y la de la banca si
            prints.colorganador()
        elif i[4] > listabanca[2] and i[
                4] <= 21:  #Determinar si el jugador ha ganado o perdido en funcion de si su puntuacion supera a la
            estado = "GANADOR/A"  #de la banca sin pasar de 21
            prints.colorganador()
        else:
            estado = "PERDEDOR/A"  #Si no se cumple ninguna ha perdido
            prints.colorperdedor()
        print(
            "   >>> Cartas de %s ⁞ Dinero: %s ⁞ Apuesta: %s ⁞ Valor de la mano: %s ⁞ %s"
            % (i[0], i[1], i[2], i[4], estado))
        imprimirCartas(i, "si")
        prints.colorreset()
    if listabanca[
            0] > 0:  # Comprueba si la banca se ha quedado sin dinero, para lanzar el mensaje de bancarota o fin de ronda
        print("")
        prints.colorinput(
            "La ronda ha finalizado, pulsa \"ENTER\" para continuar.")
    else:
        print(
            "\n   >>> \033[31mBANCAROTA! \033[92mLa banca se ha quedado sin dinero, coge el dinero antes de que llegue seguridad."
        )
        prints.colorinput("Pulsa \"ENTER\" para acabar la partida.")
def nuevosJugadores(listajugadores):
    numeronuevosJugadores = int(
        prints.colorinput("Cuantos jugadores se van a añadir?"))
    while (len(listajugadores)) + numeronuevosJugadores > 7:
        prints.colorerror("    ⚠  El máximo son 7 jugadores.")
        numeronuevosJugadores = int(
            prints.colorinput("Cuantos jugadores se van a añadir?"))
    listajugadores.extend(nombreJugadores(numeronuevosJugadores))
    dineroJugadores(listajugadores[-numeronuevosJugadores:])
def modificarBarajas(baraja):
    baraja_final = int(
        prints.colorinput(
            "Con cuantas barajas quieres jugar? [Recomendado: 8]"))
    while baraja_final < 1:  # Verificar que haya almenos 1 baraja para jugar
        prints.colorerror("    ⚠  Has de jugar como mínimo con 1 baraja.")
        baraja_final = int(
            prints.colorinput(
                "Con cuantas barajas quieres jugar? [Recomendado: 8]"))
    return baraja_final
def dineroBanca(listabanca):
    dineroBanca = int(
        prints.colorinput("Cuanto dinero quieres que tenga la banca?"))
    while dineroBanca < 50:
        prints.colorerror(
            "    ⚠  La banca no tiene suficiente dinero, necesita minimo 50.")
        dineroBanca = int(
            prints.colorinput("Cuanto dinero quieres que tenga la banca?"))
    listabanca.clear()
    listabanca.append(dineroBanca)
def cantidadJugadores():
    numeroJugadores = prints.colorinput(
        "Cuantos jugadores vais a entrar? [1-7]")
    while numeroJugadores not in ["1", "2", "3", "4", "5", "6", "7"]:
        limpiarTerminal()
        prints.creando()
        prints.colorerror("\n    ⚠  Has de seleccionar un número del 1 al 7.")
        numeroJugadores = prints.colorinput(
            "Cuantos jugadores vais a entrar? [1-7]")
    return numeroJugadores
def preguntaUnaCartaMas(jugador):
    respuesta = prints.colorinput(
        f"Quieres una carta mas {jugador}? [ si / NO ]")
    while respuesta not in [
            "si", "no", "SI", "NO", "Si", "No", "sí", "SÍ", "Sí", ""
    ]:
        prints.colorerror("    ⚠  Porfavor escriba si o no")
        respuesta = prints.colorinput(
            f"Quieres una carta mas {jugador}? [ si / NO ]")
    return respuesta
def modificarTasas(tasa_normal, tasa_blackjack):
    tasa_normal = int(
        prints.colorinput(
            "¿Por cuanto quieres multiplicar la apuesta normal? [Recomendado: 1] [Actual: %d]"
            % tasa_normal))
    tasa_blackjack = int(
        prints.colorinput(
            "¿Por cuanto quieres multiplicar la apuesta de BlackJack? [Recomendado: 2] [Actual: %d]"
            % tasa_blackjack))
    return tasa_normal, tasa_blackjack
def nombreJugadores(numerojugadores):
    listajugadores = []
    for i in range(1, numerojugadores + 1):
        nombrejugador = str(
            prints.colorinput(f"Escribe el nombre del jugador {i}:"))
        listajugadores.append([nombrejugador.capitalize()])
    return listajugadores
def añadirDinero(listajugadores, i):
    dinero = int(
        prints.colorinput(
            f"Cuanto dinero quieres añadir? [ Dinero → {listajugadores[i][1]} ]"
        ))
    dinerototal = listajugadores[i][1] + dinero
    del listajugadores[i][1]
    listajugadores[i].insert(1, dinerototal)
def valorCartas(listajugadores, listabanca):
    apuesta = listajugadores[2]
    valormano = calcularValorMano(listajugadores)
    if listajugadores[-1] != listajugadores[3]:
        del listajugadores[4]
    listajugadores.append(valormano)
    if valormano > 21:
        prints.colorerror("\n   !!! Tu puntuación es mayor a 21.")
        dinerojugador = (listajugadores.pop(1)) - apuesta
        listajugadores.insert(1, dinerojugador)
        dineroBanca = listabanca.pop(0) + apuesta
        listabanca.insert(0, dineroBanca)
        pasado = True
        prints.colorinput("Pulsa ENTER para abandonar la mesa.")
    else:
        pasado = False
    return pasado
def apuestaJugadores(listajugadores, i):
    respuesta = (prints.colorinput(
        f"Vas a doblar la apuesta inicial {listajugadores[i][0]}? [ si / NO ]")
                 )
    while respuesta not in [
            "si", "no", "SI", "NO", "Si", "No", "sí", "SÍ", "Sí", ""
    ]:
        prints.colorerror("    ⚠  Porfavor escriba si o no")
        respuesta = (prints.colorinput(
            f"Vas a doblar la apuesta inicial {listajugadores[i][0]}? [ si / NO ]"
        ))
    if respuesta == "si":
        print(
            f"   >>> Muy Bien! Doblemos la apuesta pues {listajugadores[i][0]}"
        )
        apuesta = listajugadores[i][2]
        doblar = apuesta + apuesta
        del listajugadores[i][2]
        listajugadores[i].insert(2, doblar)
def apuestaInicialJugadores(listajugadores):
    print("   >>> Hagan sus apuestas!\n")
    for i in range(len(listajugadores)):
        apuesta = int(
            prints.colorinput(
                f"Introducir apuesta de {listajugadores[i][0]}: [ Dinero → {listajugadores[i][1]} ]"
            ))
        while apuesta > listajugadores[i][1] or apuesta < 1:
            if apuesta > listajugadores[i][1]:
                prints.colorerror(
                    f"    ⚠  No puedes apostar mas dinero del que tienes en mesa!"
                )
            else:
                prints.colorerror(
                    f"    ⚠  Recuerda que la apuesta minima es de 1 euro!")
            apuesta = int(
                prints.colorinput(
                    f"Introducir apuesta de {listajugadores[i][0]} [ Dinero → {listajugadores[i][1]} ]"
                ))
        listajugadores[i].append(apuesta)
def comprobarOpcion(menu, lista, variable, opcion, listabanca, tasa_normal,
                    tasa_blackjack, baraja):
    while opcion not in lista:
        limpiarTerminal()
        if menu == "opciones":
            prints.opciones(listabanca[0], tasa_normal, tasa_blackjack, baraja)
        else:
            prints.inicio()
        prints.colorerror("    ⚠  Esta opción no está disponible")
        opcion = prints.colorinput(f"Que deseas hacer? {variable}")
    return opcion
def gestFinal(listajugadores, i, listajugadoressaliendo, opc):
    if listajugadores[i][1] <= 0:
        opcion = prints.colorinput(
            f"{listajugadores[i][0]}, ¿deseas {opc} la partida o añadir dinero? [ {opc} / añadir ]"
        )
        while opcion not in ["%s" % (opc), "añadir"]:
            prints.colorerror("    ⚠  Esta opción no está disponible")
            opcion = prints.colorinput(
                f"{listajugadores[i][0]}, ¿deseas {opc} la partida o añadir dinero? [ {opc} / añadir ]"
            )
    else:
        opcion = prints.colorinput(
            f"{listajugadores[i][0]}, ¿deseas {opc} la partida, añadir dinero, o  continuar? [ {opc} / añadir / ENTER ]"
        )
    if opcion == "%s" % (opc):
        print(f"   >>> ¡Vale! Hasta la proxima {listajugadores[i][0]}!")
        listajugadoressaliendo.append(i)
    elif opcion == "añadir":
        añadirDinero(listajugadores, i)
    else:
        ("   >>> ¡Sigamos asi pues!")
    return opcion
def finAnadirJugadores(listajugadores):
    prints.ronda()
    print(
        "   >>> Aqui cada jugador puede salir de la partida o añadir dinero!\n   >>> Ademas pueden entrar a jugar mas personas mientras se respete el numero máximo de jugadores.\n"
    )
    opcion = opcionesJugadores(listajugadores)
    if len(listajugadores) != 0 and (len(listajugadores)) < 7:
        masjugadores = prints.colorinput(
            "Van a entrar a jugar mas jugadores? [ si / NO ]")
        if masjugadores == "si":
            nuevosJugadores(listajugadores)
        if masjugadores == "no" or masjugadores == "":
            ("   >>> Sigamos pues!")
    return opcion
def menuOpciones(listabanca, tasa_normal, tasa_blackjack, baraja):
    prints.opciones(listabanca[0], tasa_normal, tasa_blackjack, baraja)
    opcion = prints.colorinput("Que deseas hacer?")
    opcion = comprobarOpcion("opciones", ["1", "2", "3", "4"], "[ 1 - 4 ]",
                             opcion, listabanca, tasa_normal, tasa_blackjack,
                             baraja)
    while opcion < "4":  # OPC 1: DINERO BANCA
        if opcion == "1":  # OPC 2: MODIFICAR TASAS
            dineroBanca(listabanca)  # OPC 3: MODIFICAR BARAJAS
        if opcion == "2":  # OPC 4: Salir
            tasa_normal, tasa_blackjack = modificarTasas(
                tasa_normal, tasa_blackjack)
        if opcion == "3":
            baraja = modificarBarajas(baraja)
        opcion = comprobarOpcion("opciones", ["1", "2", "3", "4"], "[ 1 - 4 ]",
                                 opcion, listabanca, tasa_normal,
                                 tasa_blackjack, baraja)
        opcion = menuOpcionesLimpiar(listabanca, tasa_normal, tasa_blackjack,
                                     baraja)
    return tasa_normal, tasa_blackjack, baraja
def menuPrincipalInit():
    limpiarTerminal()
    prints.inicio()
    opcion = prints.colorinput("Que deseas hacer? [ 1 - 4 ]")
    return opcion
def dineroJugadores(listajugadores):
    print("   >>> Con cuanto dinero vais a entrar cada uno?\n")
    for i in range(len(listajugadores)):
        dinero = int(
            prints.colorinput(f"Introducir dinero de {listajugadores[i][0]}:"))
        listajugadores[i].append(dinero)
                                    listabanca)  # Mostrar cartas actualizadas.
                pasado = funciones.valorCartas(listajugadores[i], listabanca)

                if not pasado:  # Comprueba si la mano del jugador activo a superado 21.
                    respuesta = funciones.preguntaUnaCartaMas(
                        listajugadores[i][0])
                    funciones.limpiarTerminal()
                if pasado:
                    respuesta = "no"
            funciones.limpiarTerminal()
            if i != len(
                    listajugadores
            ) - 1:  # Si no es el ultimo jugador se entrar en este bucle para que se haga el siguiente print.
                prints.siguiente_jugador()

                prints.colorinput(
                    "Pulsa \"ENTER\" para pasar al siguiente jugador.")
        funciones.valorCartasBanca(listabanca)
        while listabanca[
                2] < 17:  # La banca saca cartas hasta que obtiene un valor de 17 o mas.
            funciones.repartirCartaBanca(listabanca, baraja)
            funciones.valorCartasBanca(listabanca)
        funciones.compararCartas(
            listajugadores, listabanca, tasa_normal, tasa_blackjack
        )  # Determina los ganadores / perdedores de la ronda.
        funciones.limpiarTerminal()
        funciones.verMesa(
            listajugadores, listabanca
        )  # Muestra la mesa con todas las cartas destapadas y el resultado final.
        funciones.eliminarDatosRonda(listajugadores)  # Reinicia la ronda.
        if listabanca[
                0] <= 0:  # Si la banca se queda sin dinero, se da opcion terminar para que se rompa el bucle de la partida.
def menuOpcionesLimpiar(listabanca, tasa_normal, tasa_blackjack, baraja):
    limpiarTerminal()
    prints.opciones(listabanca[0], tasa_normal, tasa_blackjack, baraja)
    opcion = prints.colorinput("Que deseas hacer?")
    return opcion