//
//  Poker3ViewController.swift
//  poker
//
//  Created by Julio Hermosa on 4/21/20.
//  Copyright © 2020 Mobile Roshka. All rights reserved.
//

import UIKit

class Poker3ViewController: UIViewController {
    var baraja:Baraja = Baraja()
    var cantidadJugadores = 3
    var manos = [Manos]()
    var mesa = Manos()
    var enMesa: [(Int, String)] = []
    var valoresEnMesa = [Int]()
    var palosEnMesa = [String]()
    var jugadas: [(Jugada, [Int], Int)] = []
    var ganador = Int()
    
    @IBAction func repartirBtn(_ sender: Any) {
        repartir()
        obtenerJugadas()
        elegirGanador()
        
    }
    func repartir(){
        baraja.crearBaraja()
        for index in 0..<cantidadJugadores{
        manos.append(Manos())
        print( manos[index].extraerCartasTexasHoldem(cartasDisponibles: baraja))
        }
        enMesa = mesa.enMesa(cartasDisponibles: baraja)
        valoresEnMesa = enMesa.map {$0.0}
        palosEnMesa = enMesa.map{$0.1}
        print (enMesa)
    }
    
    func obtenerJugadas(){
        for index in 0..<cantidadJugadores{
            jugadas.append((manos[index].jugadas(valoresEnMesa: valoresEnMesa, palosEnMesa: palosEnMesa)))

        }
    }
    
    func elegirGanador(){
        var valores = jugadas.map {$0.1}
        var valoresCombinaciones = jugadas.map {$0.2}
        var nombresJugadas = jugadas.map {$0.0}
        ganador = 0
        print (nombresJugadas)
        for index in 1..<cantidadJugadores{
            if nombresJugadas[index].rawValue > nombresJugadas[ganador].rawValue{
                    ganador = index
            } else
            if nombresJugadas[index].rawValue == nombresJugadas[ganador].rawValue {
                if nombresJugadas[index] == .CartaAlta || nombresJugadas[index] == .Escalera || nombresJugadas[index] == .EscaleraColor || nombresJugadas[index] == .EscaleraReal ||
                    nombresJugadas[index] == .Color {
                    while valores[index].last! == valores[ganador].last!{
                        valores[index].removeLast()
                        valores[ganador].removeLast()
                    }
                    if valores[index].count > 0{
                        if valores[index].last! > valores[ganador].last!{
                            ganador = index
                        }
                        else{
                            ganador = -1
                        }
                    }
                }
                if nombresJugadas[index] == .Par || nombresJugadas[index] == .ParDoble || nombresJugadas[index] == .Trio || nombresJugadas[index] == .Full || nombresJugadas[index] == .Poker{
                    if valoresCombinaciones[index] > valoresCombinaciones[ganador]{
                        ganador = index
                    }
                   
                    if valoresCombinaciones[index] == valoresCombinaciones[ganador]{
                        while valores[index].last! == valores[ganador].last!{
                            valores[index].removeLast()
                            valores[ganador].removeLast()
                        }
                        if valores[index].count > 0{
                            if valores[index].last! > valores[ganador].last!{
                                ganador = index
                            }
                            else{
                                ganador = -1
                            }
                        }
                    }
                }
            }
        }
        //se muestra en una alerta quien ganó o si es empate
        if ganador == -1 {
            mostrarGanador(mensaje: "Empate")
            print("Empate")
        }else{
            mostrarGanador(mensaje: "El ganador es el jugador: \(ganador+1)")
            print ("Ganó el jugador \(ganador+1)")
        }
        mesa.barajarCartas()
        enMesa.removeAll()
        manos.removeAll()
        jugadas.removeAll()
        ganador = 0
        valores.removeAll()
        valoresCombinaciones.removeAll()
        nombresJugadas.removeAll()
    }
    private func mostrarGanador(mensaje: String){
        let alerta = UIAlertController(title: "Resultado Final", message:mensaje, preferredStyle: .alert)
        alerta.addAction(UIAlertAction(title: "Aceptar", style: .default, handler: nil))
        present(alerta, animated:true, completion:nil)
    }

    override func viewDidLoad() {
        super.viewDidLoad()
    }
}
