
# ============================================================
# EVOLUCAO TEMPORAL DA RELACAO ENTRE OS EFETIVOS OVINOS
# E CAPRINOS NAS GRANDES REGIOES BRASILEIRAS (2015-2025)
#
# SCRIPT 02 - FIGURA 1: EVOLUCAO TEMPORAL DA RAZAO O/C
#
# AUTORES:
# A confirmar antes do deposito no Zenodo
#
# INSTITUICAO:
# Universidade Federal de Alagoas (UFAL)
# Campus de Engenharias e Ciencias Agrarias (CECA)
# Rio Largo, Alagoas, Brasil
#
# FONTE DOS DADOS:
# IBGE / SIDRA - Pesquisa da Pecuaria Municipal
# Tabela 3939
#
# ENTRADA:
# resultados/banco_ovinos_caprinos_2015_2025.csv
#
# SAIDAS:
# resultados/Figura_1_Evolucao_Razao_OC_FINAL.png
# resultados/Figura_1_Evolucao_Razao_OC_FINAL.pdf
#
# ============================================================


# 1. PACOTES
# ------------------------------------------------------------

pacotes <- c(
  "dplyr",
  "ggplot2"
)

faltantes <- pacotes[
  !vapply(
    pacotes,
    requireNamespace,
    logical(1),
    quietly = TRUE
  )
]

if (length(faltantes) > 0) {
  install.packages(faltantes)
}

invisible(
  lapply(pacotes, library, character.only = TRUE)
)


# 2. DIRETORIOS E ARQUIVO DE ENTRADA
# ------------------------------------------------------------

# Executar a partir da pasta principal do projeto.
# O Script 01 deve ter sido executado anteriormente.

pasta_resultados <- "resultados"

arquivo_banco <- file.path(
  pasta_resultados,
  "banco_ovinos_caprinos_2015_2025.csv"
)

if (!file.exists(arquivo_banco)) {
  stop(
    "Banco longitudinal nao encontrado: ",
    arquivo_banco,
    "\nExecute primeiro o Script 01."
  )
}


# 3. IMPORTACAO DO BANCO LONGITUDINAL
# ------------------------------------------------------------

# O Script 01 utiliza write.csv().
# Portanto, a leitura e realizada com read.csv().

dados <- utils::read.csv(
  arquivo_banco,
  stringsAsFactors = FALSE,
  fileEncoding = "UTF-8",
  check.names = FALSE
)

variaveis_obrigatorias <- c(
  "regiao",
  "ano",
  "ovinos",
  "caprinos",
  "razao_oc"
)

if (!all(
  variaveis_obrigatorias %in% names(dados)
)) {
  stop(
    "O banco nao contem todas as variaveis ",
    "obrigatorias para construir a Figura 1."
  )
}


# 4. AUDITORIA DO BANCO
# ------------------------------------------------------------

ordem_regioes <- c(
  "Norte",
  "Nordeste",
  "Centro-Oeste",
  "Sudeste",
  "Sul"
)

stopifnot(
  nrow(dados) == 55,
  dplyr::n_distinct(dados$regiao) == 5,
  dplyr::n_distinct(dados$ano) == 11,
  setequal(unique(dados$regiao), ordem_regioes),
  setequal(unique(dados$ano), 2015:2025),
  all(table(dados$regiao) == 11),
  !anyNA(dados[, variaveis_obrigatorias]),
  all(dados$ovinos > 0),
  all(dados$caprinos > 0),
  !anyDuplicated(dados[c("regiao", "ano")])
)

# Conferencia da razao ovinos/caprinos.
# Esta verificacao nao substitui a auditoria
# da Tabela 1, realizada no Script 01.

stopifnot(
  isTRUE(
    all.equal(
      dados$razao_oc,
      dados$ovinos / dados$caprinos,
      tolerance = 1e-10
    )
  )
)

dados <- dados %>%
  dplyr::mutate(
    regiao = factor(
      regiao,
      levels = ordem_regioes
    )
  ) %>%
  dplyr::arrange(regiao, ano)

cat("\n====================================\n")
cat("AUDITORIA DO BANCO - FIGURA 1\n")
cat("====================================\n")

cat("Observacoes:", nrow(dados), "\n")
cat("Regioes:", nlevels(dados$regiao), "\n")
cat(
  "Periodo:",
  min(dados$ano),
  "-",
  max(dados$ano),
  "\n"
)

cat("Auditoria estrutural: APROVADA\n")


# 5. CORES, TIPOS DE LINHA E SIMBOLOS
# ------------------------------------------------------------

# Configuracoes preservadas da Figura 1 original.

cores_regioes <- c(
  "Norte"        = "#B24732",
  "Nordeste"     = "#807000",
  "Centro-Oeste" = "#08764E",
  "Sudeste"      = "#2457A7",
  "Sul"          = "#873C91"
)

tipos_linha <- c(
  "Norte"        = "solid",
  "Nordeste"     = "dashed",
  "Centro-Oeste" = "dotdash",
  "Sudeste"      = "longdash",
  "Sul"          = "solid"
)

formas_pontos <- c(
  "Norte"        = 16,
  "Nordeste"     = 17,
  "Centro-Oeste" = 15,
  "Sudeste"      = 18,
  "Sul"          = 8
)


# 6. CONSTRUCAO DA FIGURA 1
# ------------------------------------------------------------

fig1 <- ggplot2::ggplot(
  dados,
  ggplot2::aes(
    x = ano,
    y = razao_oc,
    color = regiao,
    linetype = regiao,
    shape = regiao,
    group = regiao
  )
) +
  
  ggplot2::geom_line(
    linewidth = 0.90
  ) +
  
  ggplot2::geom_point(
    size = 2.0
  ) +
  
  ggplot2::scale_color_manual(
    values = cores_regioes,
    breaks = ordem_regioes
  ) +
  
  ggplot2::scale_linetype_manual(
    values = tipos_linha,
    breaks = ordem_regioes
  ) +
  
  ggplot2::scale_shape_manual(
    values = formas_pontos,
    breaks = ordem_regioes
  ) +
  
  ggplot2::scale_x_continuous(
    breaks = 2015:2025
  ) +
  
  ggplot2::scale_y_continuous(
    limits = c(0, NA),
    expand = ggplot2::expansion(
      mult = c(0, 0.06)
    )
  ) +
  
  ggplot2::labs(
    x = "Ano",
    y = "Razão entre efetivos ovinos e caprinos (O/C)",
    color = "Grande região",
    linetype = "Grande região",
    shape = "Grande região"
  ) +
  
  ggplot2::theme_classic(
    base_size = 12
  ) +
  
  ggplot2::theme(
    legend.position = "bottom",
    
    legend.title = ggplot2::element_blank(),
    
    legend.text = ggplot2::element_text(
      size = 9.5
    ),
    
    legend.key.width = grid::unit(
      1.5,
      "cm"
    ),
    
    legend.spacing.x = grid::unit(
      0.15,
      "cm"
    ),
    
    axis.title = ggplot2::element_text(
      size = 11
    ),
    
    axis.text = ggplot2::element_text(
      size = 10
    ),
    
    axis.text.x = ggplot2::element_text(
      angle = 45,
      hjust = 1
    ),
    
    plot.background = ggplot2::element_rect(
      fill = "white",
      color = NA
    ),
    
    panel.background = ggplot2::element_rect(
      fill = "white",
      color = NA
    ),
    
    plot.margin = ggplot2::margin(
      8, 10, 8, 8
    )
  ) +
  
  ggplot2::guides(
    color = ggplot2::guide_legend(
      nrow = 1,
      byrow = TRUE
    ),
    
    linetype = ggplot2::guide_legend(
      nrow = 1,
      byrow = TRUE
    ),
    
    shape = ggplot2::guide_legend(
      nrow = 1,
      byrow = TRUE
    )
  )


# 7. VISUALIZACAO DA FIGURA
# ------------------------------------------------------------

print(fig1)


# 8. EXPORTACAO EM PNG - 600 DPI
# ------------------------------------------------------------

arquivo_png <- file.path(
  pasta_resultados,
  "Figura_1_Evolucao_Razao_OC_FINAL.png"
)

ggplot2::ggsave(
  filename = arquivo_png,
  plot = fig1,
  width = 22,
  height = 12,
  units = "cm",
  dpi = 600,
  bg = "white"
)


# 9. EXPORTACAO EM PDF VETORIAL
# ------------------------------------------------------------

arquivo_pdf <- file.path(
  pasta_resultados,
  "Figura_1_Evolucao_Razao_OC_FINAL.pdf"
)

ggplot2::ggsave(
  filename = arquivo_pdf,
  plot = fig1,
  width = 22,
  height = 12,
  units = "cm",
  bg = "white"
)


# 10. VERIFICACAO DOS ARQUIVOS EXPORTADOS
# ------------------------------------------------------------

arquivos_saida <- c(
  arquivo_png,
  arquivo_pdf
)

if (!all(file.exists(arquivos_saida))) {
  stop(
    "Um ou mais arquivos da Figura 1 ",
    "nao foram gerados."
  )
}

if (any(file.info(arquivos_saida)$size <= 0)) {
  stop(
    "Um ou mais arquivos da Figura 1 ",
    "estao vazios."
  )
}


# 11. FINALIZACAO
# ------------------------------------------------------------

cat("\n====================================\n")
cat("SCRIPT 02 - FIGURA 1 CONCLUIDA\n")
cat("====================================\n")

cat("Observacoes:", nrow(dados), "\n")
cat("Regioes:", nlevels(dados$regiao), "\n")

cat(
  "Periodo:",
  min(dados$ano),
  "-",
  max(dados$ano),
  "\n"
)

cat("\nArquivos exportados:\n")
cat("- Figura_1_Evolucao_Razao_OC_FINAL.png\n")
cat("- Figura_1_Evolucao_Razao_OC_FINAL.pdf\n")

cat("\nDimensoes: 22 x 12 cm\n")
cat("Resolucao PNG: 600 dpi\n")
cat("Formato adicional: PDF vetorial\n")
cat("Pasta:", pasta_resultados, "\n")

cat("====================================\n")
