ranks <- c("2", "3", "4", "5", "6", "7", "8", "9", "T", "J", "Q", "K", "A")

calculate_equity_suited <- function(hand) {
  path_base <- paste0("../")
  file_prefix <- paste0(hand)

  files <- list(
    suited_same = paste0(path_base, "Suited_vs_Suited/", file_prefix, "_vs_suited_same.csv"),
    suited_diff = paste0(path_base, "Suited_vs_Suited/", file_prefix, "_vs_suited_different.csv"),
    one_unsuited = paste0(path_base, "Suited_vs_1Unsuited/", file_prefix, "_vs_1unsuited.csv"),
    two_unsuited = paste0(path_base, "Suited_vs_2Unsuited/", file_prefix, "_vs_2unsuited.csv")
  )

  data_list <- lapply(files, read.csv)
  sim_number <- 2175 * sum(sapply(data_list, nrow))
  
  equity_list <- lapply(data_list, function(df) {
    colSums(df[ , grepl("_Wins$|^Draws", names(df))])
  })

  total_equity <- Reduce(`+`, equity_list)
  sumequity <- sum(total_equity) / sim_number
  return(sumequity*100)
}

equity_matrix_suited <- matrix(NA, nrow = length(ranks), ncol = length(ranks),
                        dimnames = list(ranks, ranks))

for (i in 1:(length(ranks) - 1)) {
  for (j in (i+1):length(ranks)) {
    hand_name <- paste0(ranks[i], "_", ranks[j], "_suited")
    equity <- calculate_equity_suited(hand_name)
    equity_matrix_suited[ranks[i], ranks[j]] <- equity
  }
}

library(ggplot2)
## Warning: pakiet 'ggplot2' został zbudowany w wersji R 4.4.3
library(reshape2)
## Warning: pakiet 'reshape2' został zbudowany w wersji R 4.4.3
df1 <- melt(equity_matrix_suited, na.rm = TRUE)
colnames(df1) <- c("Card1", "Card2", "Equity")

ggplot(df1, aes(x = Card1, y = Card2, fill = Equity)) +
  geom_tile(color = "white") +
  scale_fill_gradient2(low = "darkred", mid = "lightyellow", high = "darkgreen", midpoint = median(df1$Equity)) +
  scale_x_discrete(position = "top") +
  scale_y_discrete(limits = rev(levels(df1$Card2))) +
  labs(title = "Overall equity suited", x = "Karta 1", y = "Karta 2") +
  theme_minimal() +
  coord_fixed() +
  geom_text(aes(label = round(Equity, 1)), color = "black", size = 3)

ranks <- c("2", "3", "4", "5", "6", "7", "8", "9", "T", "J", "Q", "K", "A")

calculate_equity_unsuited <- function(hand1, hand2) {
  path_base <- paste0("../")

  files <- list(
    unsuited_same = paste0(path_base, "2Unsuited_vs_Unsuited/", hand1, "_2unsuited_vs_unsuited_same.csv"),
    unsuited_diff = paste0(path_base, "2Unsuited_vs_Unsuited/", hand1, "_2unsuited_vs_unsuited_different.csv"),
    two_unsuited_suited = paste0(path_base, "2Unsuited_vs_Suited/", hand1, "_2unsuited_vs_suited.csv"),
    one_unsuited_unsuited = paste0(path_base, "1Unsuited_vs_Unsuited/", hand1, "_1unsuited_vs_unsuited.csv"),
    one_unsuited_suited = paste0(path_base, "1Unsuited_vs_Suited/", hand1, "_1unsuited_vs_suited.csv"),
    unsuited_same2 = paste0(path_base, "2Unsuited_vs_Unsuited/", hand2, "_2unsuited_vs_unsuited_same.csv"),
    unsuited_diff2 = paste0(path_base, "2Unsuited_vs_Unsuited/", hand2, "_2unsuited_vs_unsuited_different.csv"),
    two_unsuited_suited2 = paste0(path_base, "2Unsuited_vs_Suited/", hand2, "_2unsuited_vs_suited.csv"),
    one_unsuited_unsuited2 = paste0(path_base, "1Unsuited_vs_Unsuited/", hand2, "_1unsuited_vs_unsuited.csv"),
    one_unsuited_suited2 = paste0(path_base, "1Unsuited_vs_Suited/", hand2, "_1unsuited_vs_suited.csv")
  )

  data_list <- lapply(files, function(f) {
    if (file.exists(f)) {
      read.csv(f)
    } else {
      NULL
    }
  })

  data_list <- Filter(Negate(is.null), data_list)
  
  sim_number <- 2175 * sum(sapply(data_list, nrow))
  
  equity_list <- lapply(data_list, function(df) {
    colSums(df[ , grepl("_Wins$|^Draws", names(df))])
  })

  total_equity <- Reduce(`+`, equity_list)
  sumequity <- sum(total_equity) / sim_number
  return(sumequity*100)
}

calculate_equity_unsuited_pairs <- function(hand) {
  path_base <- paste0("../")

  files <- list(
    unsuited_same = paste0(path_base, "2Unsuited_vs_Unsuited/", hand, "_2unsuited_vs_unsuited_same.csv"),
    unsuited_diff = paste0(path_base, "2Unsuited_vs_Unsuited/", hand, "_2unsuited_vs_unsuited_different.csv"),
    two_unsuited_suited = paste0(path_base, "2Unsuited_vs_Suited/", hand, "_2unsuited_vs_suited.csv"),
    one_unsuited_unsuited = paste0(path_base, "1Unsuited_vs_Unsuited/", hand, "_1unsuited_vs_unsuited.csv"),
    one_unsuited_suited = paste0(path_base, "1Unsuited_vs_Suited/", hand, "_1unsuited_vs_suited.csv")
  )

  data_list <- lapply(files, read.csv)
  
  sim_number <- 2175 * sum(sapply(data_list, nrow))
  
  equity_list <- lapply(data_list, function(df) {
    colSums(df[ , grepl("_Wins$|^Draws", names(df))])
  })

  total_equity <- Reduce(`+`, equity_list)
  sumequity <- sum(total_equity) / sim_number
  return(sumequity*100)
}

equity_matrix_unsuited <- matrix(NA, nrow = length(ranks), ncol = length(ranks),
                        dimnames = list(ranks, ranks))

for (i in 1:(length(ranks))) {
  for (j in i:(length(ranks))) {
    if (i == j){
      hand_name <- paste0(ranks[i], "_", ranks[j])
      equity <- calculate_equity_unsuited_pairs(hand_name)
      equity_matrix_unsuited[ranks[i], ranks[j]] <- equity 
    }else{
    hand_name1 <- paste0(ranks[i], "_", ranks[j])
    hand_name2 <- paste0(ranks[j], "_", ranks[i])
    equity <- calculate_equity_unsuited(hand_name1, hand_name2)
    equity_matrix_unsuited[ranks[i], ranks[j]] <- equity
    }
  }
}

df2 <- melt(equity_matrix_unsuited, na.rm = TRUE)
colnames(df2) <- c("Card1", "Card2", "Equity")

ggplot(df2, aes(x = Card1, y = Card2, fill = Equity)) +
  geom_tile(color = "white") +
  scale_fill_gradient2(low = "darkred", mid = "lightyellow", high = "darkgreen", midpoint = median(df2$Equity)) +
  scale_x_discrete(position = "top") +
  scale_y_discrete(limits = rev(levels(df2$Card2))) +
  labs(title = "Overall equity offsuited", x = "Karta 1", y = "Karta 2") +
  theme_minimal() +
  coord_fixed() +
  geom_text(aes(label = round(Equity, 1)), color = "black", size = 3)