# ---------------------------------------------------------
#  Pacotes
# ---------------------------------------------------------
library(sf)
library(dplyr)
library(ggplot2)
library(patchwork)
library(readxl)
library(cowplot)

# ---------------------------------------------------------
#  DiretĂłrio
# ---------------------------------------------------------
setwd("C:/Users/ricar/OneDrive/Documentos/Projetos/Observatorio_Equidade/BR_Municipios_2025")

# ---------------------------------------------------------
# Leitura dos dados
# ---------------------------------------------------------
dados_tab <- read_excel("dados_climaticos2.xlsx")

shape_mun <- st_read("BR_Municipios_2025.shp", quiet = TRUE) %>%
  st_transform(4326) %>%
  st_make_valid() %>%
  st_simplify(dTolerance = 0.01, preserveTopology = TRUE)

# ---------------------------------------------------------
# Junção
# ---------------------------------------------------------
dados_sf <- shape_mun %>%
  left_join(dados_tab, by = c("NM_MUN", "NM_UF"))

# ---------------------------------------------------------
#  Classes SPI (ordem fixa)
# ---------------------------------------------------------
ordem_classes <- c(
"Extremamente seco",
 "Severamente seco",
  "Moderadamente seco",
  "Seca incipiente",
  "Umidade incipiente",
  "Moderadamente Ăşmido",
  "Severamente Ăşmido",
  "Extremamente Ăşmido")

dados_sf$`Classes de SPI` <- factor(dados_sf$`Classes de SPI`, levels = ordem_classes)

# ---------------------------------------------------------
#  Função FINAL correta
# ---------------------------------------------------------
mapa_classe_spi_ano <- function(ano) {

  df_ano <- dados_sf %>%
    filter(YEAR == ano)

  # ------------------------
  # Mapas por trimestre (SEM legenda)
  # ------------------------
  plots <- lapply(
    sort(unique(df_ano$trimestre)),
    function(t) {

      ggplot(df_ano %>% filter(trimestre == t)) +
        geom_sf(aes(fill = `Classes de SPI`), color = NA) +

        scale_fill_brewer(
          palette = "Spectral",
          drop = FALSE,
          limits = ordem_classes
        ) +

        labs(title = paste("Classes de SPI –", t, "/", ano)) +

        theme_minimal() +
        theme(
          legend.position = "none",
          plot.title = element_text(size = 11, face = "bold")
        )
    }
  )

# ------------------------
# Legenda Ăşnica (correta)
# ------------------------
legenda_plot <- ggplot(dados_sf) +
  geom_sf(aes(fill = `Classes de SPI`)) +
  scale_fill_brewer(
    palette = "Spectral",
    drop = FALSE,
    limits = ordem_classes
  ) +
  theme_void() +
  theme(
    legend.position = "right",
    legend.title = element_text(size = 10),
    legend.text = element_text(size = 8)
  )

legenda <- cowplot::get_legend(legenda_plot)

# ------------------------
# Combinação final
# ------------------------
mapas <- patchwork::wrap_plots(plots, ncol = 2)

final <- cowplot::plot_grid(
 mapas,
  legenda,
    ncol = 2,
    rel_widths = c(4, 1)
  )

  return(final)
}

# ---------------------------------------------------
# Gerar TODOS os anos (IMPORTANTE no RMarkdown)
# ---------------------------------------------------
anos <- sort(unique(dados_sf$YEAR))

for (ano in anos) {
  print(mapa_classe_spi_ano(ano))
}