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

import UIKit

class ViewController: UIViewController {
    //var carta:Carta = Carta.init()
    var baraja:Baraja = Baraja()
    var mano1:Manos = Manos()
    var mano2:Manos = Manos()
    var resultado1: (Jugada, [Int], Int)? = nil
    var resultado2: (Jugada, [Int], Int)? = nil
    var ganador = String()
    
    @IBOutlet weak var resultadoObtenido1: UILabel!
    
    @IBOutlet weak var resultadoObtenido2: UILabel!
    
    @IBOutlet weak var valorCarta1: UILabel!
    @IBOutlet weak var valorCarta2: UILabel!
    @IBOutlet weak var valorCarta3: UILabel!
    @IBOutlet weak var valorCarta4: UILabel!
    @IBOutlet weak var valorCarta5: UILabel!
    @IBOutlet weak var valorCarta6: UILabel!
    @IBOutlet weak var valorCarta7: UILabel!
    @IBOutlet weak var valorCarta8: UILabel!
    @IBOutlet weak var valorCarta9: UILabel!
    @IBOutlet weak var valorCarta10: UILabel!
    
    @IBOutlet weak var imagenCarta1: UIImageView!
    @IBOutlet weak var imagenCarta2: UIImageView!
    @IBOutlet weak var imagenCarta3: UIImageView!
    @IBOutlet weak var imagenCarta4: UIImageView!
    @IBOutlet weak var imagenCarta5: UIImageView!
    @IBOutlet weak var imagenCarta6: UIImageView!
    @IBOutlet weak var imagenCarta7: UIImageView!
    @IBOutlet weak var imagenCarta8: UIImageView!
    @IBOutlet weak var imagenCarta9: UIImageView!
    @IBOutlet weak var imagenCarta10: UIImageView!
    
    
    @IBOutlet weak var jugarBtn: UIButton!
    
    @IBAction func jugarAction(_ sender: Any) {
        jugar()
    }
    
    //llamamos a las funciones relativas al juego de la clase Manos (extraer cartas, obtener la jugada y volver a barajar las cartas)
    func jugar(){
        baraja.crearBaraja()//creamos un mazo completo de 52 cartas
        
        mano1.extraerCartas(cartasDisponibles: baraja)
        //se envia el array con las cartas aún disponibles
        mano2.extraerCartas(cartasDisponibles: baraja)
        
        resultado1 = mano1.jugadas()
        //se guardan los resultados obtenidos en variables resultadoN
        resultado2 = mano2.jugadas()
        
        resultadoObtenido1.text = "\(mano1.jugadas().0)"
        //se imprime en los labels el nombre de las jugadas para cada jugador
        resultadoObtenido2.text = "\(mano2.jugadas().0)"
        
        
        //cargamos los valores del array en los labels de las cartas
        valorCarta1.text = mano1.nombreCarta[0]
        valorCarta2.text = mano1.nombreCarta[1]
        valorCarta3.text = mano1.nombreCarta[2]
        valorCarta4.text = mano1.nombreCarta[3]
        valorCarta5.text = mano1.nombreCarta[4]
        
        valorCarta6.text = mano2.nombreCarta[0]
        valorCarta7.text = mano2.nombreCarta[1]
        valorCarta8.text = mano2.nombreCarta[2]
        valorCarta9.text = mano2.nombreCarta[3]
        valorCarta10.text = mano2.nombreCarta[4]
        
        //segun el nombre de la imagen mostramos su palo
        imagenCarta1.image = UIImage(named: "poker-\(mano1.palo[0])")
        imagenCarta2.image = UIImage(named: "poker-\(mano1.palo[1])")
        imagenCarta3.image = UIImage(named: "poker-\(mano1.palo[2])")
        imagenCarta4.image = UIImage(named: "poker-\(mano1.palo[3])")
        imagenCarta5.image = UIImage(named: "poker-\(mano1.palo[4])")
        imagenCarta6.image = UIImage(named: "poker-\(mano2.palo[0])")
        imagenCarta7.image = UIImage(named: "poker-\(mano2.palo[1])")
        imagenCarta8.image = UIImage(named: "poker-\(mano2.palo[2])")
        imagenCarta9.image = UIImage(named: "poker-\(mano2.palo[3])")
        imagenCarta10.image = UIImage(named: "poker-\(mano2.palo[4])")
        
        //llamamos a la función que se encarga de elegir al ganador
        elegirGanador()
        
        mano1.barajarCartas()
        //devolvemos las cartas al mazo
        mano2.barajarCartas()
    }
    
    func elegirGanador(){
        var valores1 = resultado1!.1
        var valores2 = resultado2!.1
        
        //comparamos las jugadas segun su ranking para elegir al ganador
        if resultado1!.0.rawValue > resultado2!.0.rawValue {
            ganador = "Jugador1"
        }
        if resultado2!.0.rawValue > resultado1!.0.rawValue{
            ganador = "Jugador2"
        }
        //si ambas jugadas son iguales, se procede al desempate
        if resultado1!.0 == resultado2!.0 {
            //como se aplican métodos de desempate similares para las escaleras, color y carta alta, se procede a comparar los valores de mayor a menor
            if resultado1!.0 == .CartaAlta || resultado1!.0 == .Escalera || resultado1!.0 == .EscaleraColor || resultado1!.0 == .EscaleraReal || resultado1!.0 == .Color {
                while valores1.last! == valores2.last!{
                    valores1.removeLast()
                    valores2.removeLast()
                }
                if valores1.count > 0{
                if valores1.last! > valores2.last!{
                    ganador = "Jugador1"
                } else
                if valores2.last! > valores1.last!{
                    ganador = "Jugador2"
                }
                else{
                    ganador = "Empate"
                    }
                }
            }
            //para desempatar se elige la combinación mayor, en caso de haber empate se comparan con las cartas que no forman parte de la combinación
            if resultado1!.0 == .Par || resultado1!.0 == .ParDoble || resultado1!.0 == .Trio || resultado1!.0 == .Full || resultado1!.0 == .Poker{
                
                if resultado1!.2 > resultado2!.2{
                    ganador = "Jugador1"
                }
                if resultado2!.2 > resultado1!.2{
                    ganador = "Jugador2"
                }
                if resultado2!.2 == resultado1!.2{
                    while valores1.last! == valores2.last!{
                        valores1.removeLast()
                        valores2.removeLast()
                    }
                    if valores1.count > 0{
                    if valores1.last! > valores2.last!{
                        ganador = "Jugador1"
                    } else
                    if valores2.last! > valores1.last!{
                        ganador = "Jugador2"
                    }
                    else{
                        ganador = "Empate"
                        }
                    }
                    
                }
                
            }
        }
        
        //se muestra en una alerta quien ganó o si es empate
        if ganador == "Empate" {
            mostrarGanador(mensaje: "\(ganador)")
        }else{
            mostrarGanador(mensaje: "El ganador es: \(ganador)")
        }
    }
    
    //se crea la alerta, que muestra quien ganó o si es empate
    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()
    }


}

