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

# Diretório de trabalho ---------------------------------------------------
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 tabela + shape ---------------------------------------------------
dados_sf <- shape_mun |>
  left_join(dados_tab, by = c("NM_MUN", "NM_UF"))

# Ordem das classes SPI ---------------------------------------------------
ordem_classes <- c(
  "Extrema. seco",
  "Sev. seco",
  "Mod. seco",
  "Seca incip.",
  "Normal",
  "Umid. incip.",
  "Mod. úmido",
  "Sev. úmido",
  "Extrema. úmido"
)

dados_sf$classe_spi <- factor(
  dados_sf$classe_spi,
  levels = ordem_classes
)

# Função para gerar mapas por ano ----------------------------------------
mapa_classe_spi_ano <- function(ano) {

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

  plots <- lapply(
    sort(unique(df_ano$trimestre)),
    function(t) {
      ggplot(df_ano |> filter(trimestre == t)) +
        geom_sf(aes(fill = classe_spi), color = NA) +
        scale_fill_brewer(
          palette = "Spectral",
          drop = FALSE
        ) +
        labs(
          title = paste("Classes de SPI –", t, "/", ano),
          fill = "Classe SPI"
        ) +
        theme_minimal() +
        theme(
          legend.position = "bottom",
          legend.title = element_text(size = 9),
          legend.text = element_text(size = 8),
          plot.title = element_text(size = 11, face = "bold")
        )
    }
  )

  wrap_plots(
    plots,
    ncol = 2,
    guides = "collect"
  ) &
    theme(
      legend.position = "bottom"
    )
}

# Geração dos mapas -------------------------------------------------------
anos <- sort(unique(dados_sf$YEAR))
lapply(anos, mapa_classe_spi_ano)
## [[1]]

## 
## [[2]]

## 
## [[3]]

## 
## [[4]]

## 
## [[5]]

## 
## [[6]]