##############################################################################
########### CÓDIGO PARA LA CREACIÓN DE MAPAS              ####################
########### PRADATOS ANALÍTICA + IA                       ####################
##############################################################################

rm(list = ls(all.names = TRUE))

library("readr"); library("zip"); library("dplyr"); library("data.table"); library("foreign"); library(readxl); library("writexl"); library(tidyr); library(ggplot2)
library(sf);library(grid);library(patchwork)

#Seleccionamos el directorio

setwd("G:/Mi unidad/PRADATOS ANALÍTICA/1.Consultoría/2.Claro - CRC Dominancia - 2026/Documentos soporte/Posdata/Bases CRC/")
options(scipen = 999)

#Cobertura x centros poblados ####

CP_TOT <- read_excel("Cobertura.xlsx", sheet = "CP_TOT")

CP_TOTA=CP_TOT
CP_TOTA$AÑO <- factor(CP_TOTA$AÑO)
CP_TOTA <- CP_TOTA[CP_TOT$PROVEEDOR != "Tigo recargado", ]
with( subset(CP_TOT, PROVEEDOR == "Claro"), tapply(centropoblado, AÑO, sum))

Cobertura_antes<-ggplot(CP_TOTA, aes(x = AÑO, y = reorder(DEPARTAMENTO, centropoblado), fill = centropoblado)) +
  geom_tile(color = "white", linewidth = 0.5) +
  geom_text( aes(label = centropoblado), color = "black", size = 3, family = "roboto") +
  facet_wrap(~PROVEEDOR, nrow = 1)+
  scale_fill_gradientn(
    colours = c("#ffffcc", "#a1dab4", "#41b6c4", "#225ea8"),
    name = "Cobertura" ) +
  labs(   title = "Cobertura de Centros Poblados por operador y departamento",   x = "",  y = "" ) +
  theme_classic() +
  theme(
    text = element_text(family = "roboto", color = "black"),
    axis.text = element_text(size = 10, color = "black"),
    strip.text = element_text(size = 12, face = "bold"),
    plot.title = element_text(size = 14, face = "bold"),
    panel.spacing = unit(1.2, "lines") )


CP_TOT$AÑO <- factor(CP_TOT$AÑO)
CP_TOT <- CP_TOT %>%
  filter(!PROVEEDOR %in% c("Tigo", "Movistar"))

Cobertura_ahora<- ggplot(CP_TOT, aes(x = AÑO, y = reorder(DEPARTAMENTO, centropoblado), fill = centropoblado)) +
  geom_tile(color = "white", linewidth = 0.5) +
  geom_text( aes(label = centropoblado), color = "black", size = 3, family = "roboto") +
  facet_wrap(~PROVEEDOR, nrow = 1)+
  scale_fill_gradientn(
    colours = c("#ffffcc", "#a1dab4", "#41b6c4", "#225ea8"),
    name = "Cobertura" ) +
  labs(   title = "Cobertura de Centros Poblados por operador y departamento",   x = "",  y = "" ) +
  theme_classic() +
  theme(
    text = element_text(family = "roboto", color = "black"),
    axis.text = element_text(size = 10, color = "black"),
    strip.text = element_text(size = 12, face = "bold"),
    plot.title = element_text(size = 14, face = "bold"),
    panel.spacing = unit(1.2, "lines") )


#Tipo de cobertura ####

MaxCobertura <- read_excel("Cobertura.xlsx", sheet = "MaxCobertura")

with( subset(MaxCobertura, PROVEEDOR == "Claro"), table(AÑO, max))

base_mejora <- MaxCobertura |>
  select(AÑO, PROVEEDOR, DEPARTAMENTO, MUNICIPIO, CODMPIO, max) |>
  
  pivot_wider(  names_from = AÑO,  values_from = max) |>
  
  mutate(
    `2021` = ifelse(is.na(`2021`), 0, `2021`),
    `2025` = ifelse(is.na(`2025`), 0, `2025`),
    
    cobertura_2025 = `2025`,
    cambio = `2025` - `2021`,
    
    mejora = ifelse(cambio > 0, 1, 0),
    
    estado = case_when(
      `2021` == 0 & `2025` == 0 ~ "Sin cobertura",
      `2021` == 0 & `2025` > 0 ~ "Nueva cobertura",
      cambio > 0 ~ "Mejora tecnológica",
      cambio < 0 ~ "Retroceso",
      cambio == 0 ~ "Sin cambio"
    )
    
  ) |>
  
  select(PROVEEDOR, DEPARTAMENTO, MUNICIPIO, CODMPIO,
         cobertura_2025, mejora, estado)

with(
  subset(base_mejora, PROVEEDOR == "Tigo"),
  table( estado)
)


unique(base_mejora$estado)

colores <- c(
  "Sin cobertura" = "grey",
  "Nueva cobertura" = "#ffffcc",
  "Sin cambio" = "#a1dab4",
  "Mejora tecnológica" = "#41b6c4",
  "Retroceso" = "#225ea8"
)


# Cargar shape de Colombia
Colombia <- sf::st_read("C:/Users/camil/Desktop/Proyecto Comcel/Colombia_Municipio.shp") |>
  dplyr::select(DPTO_CCDGO, MPIO_CCNCT, DPTO_CNMBR, MPIO_CNMBR, geometry) |>
  dplyr::rename(CODMPIO = MPIO_CCNCT) |>
  dplyr::mutate(CODMPIO = as.numeric(CODMPIO))

niveles_estado <- c("Sin cobertura", "Nueva cobertura",
                    "Sin cambio", "Mejora tecnológica", "Retroceso")

mapa_proveedor <- function(proveedor) {
  
  base_proveedor <- base_mejora |>
    dplyr::filter(toupper(PROVEEDOR) == toupper(proveedor))
  
  if (nrow(base_proveedor) == 0) {
    stop(paste("Proveedor no encontrado:", proveedor,
               "\nDisponibles:", paste(unique(base_mejora$PROVEEDOR), collapse = ", ")))
  }
  
  Colombia_proveedor <- Colombia |>
    dplyr::select(CODMPIO, DPTO_CNMBR, MPIO_CNMBR, geometry) |>
    dplyr::left_join(
      base_proveedor |> dplyr::select(CODMPIO, estado),
      by = "CODMPIO"
    ) |>
    dplyr::mutate(
      estado = factor(
        dplyr::coalesce(as.character(estado), "Sin cobertura"),
        levels = niveles_estado
      )
    )
  
  # Usar DPTO_CNMBR del shapefile para el filtro (nunca es NA)
  mapa_mainland <- Colombia_proveedor |>
    dplyr::filter(!grepl("SAN ANDRÉS", toupper(DPTO_CNMBR)))
  
  mapa_islas <- Colombia_proveedor |>
    dplyr::filter(grepl("SAN ANDRÉS", toupper(DPTO_CNMBR)))
  
  # Niveles que realmente aparecen (para leyenda limpia)
  niveles_presentes <- niveles_estado[niveles_estado %in% 
                                        levels(droplevels(Colombia_proveedor$estado))]
  
  Mapa_principal <- ggplot() +
    geom_sf(
      data      = mapa_mainland,
      aes(fill  = estado),
      color     = "black",
      linewidth = 0.3
    ) +
    scale_fill_manual(
      values = colores,
      name   = "Estado cobertura",
      drop   = TRUE,
      breaks = niveles_presentes
    ) +
    theme_void() +
    theme(
      legend.position = c(.12, .15),
      legend.title    = element_text(face = "bold", size = 10),
      legend.text     = element_text(size = 9),
      plot.title      = element_text(face = "bold", hjust = 0),
      plot.margin     = margin(10, 10, 10, 10)
    ) +
    labs(title = proveedor)
  
  mapa_islas_plot <- ggplot() +
    geom_sf(
      data      = mapa_islas,
      aes(fill  = estado),
      color     = "black",
      linewidth = 0.4
    ) +
    scale_fill_manual(
      values = colores,
      drop   = TRUE,
      breaks = niveles_presentes
    ) +
    theme_void() +
    theme(
      legend.position = "none",
      plot.margin     = margin(0, 0, 0, 0),
      plot.background = element_rect(fill = NA, color = "#aaaaaa", linewidth = 0.3)
    )
  
  Mapa_final <- Mapa_principal +
    patchwork::inset_element(
      mapa_islas_plot,
      left     = 0.01,
      right    = 0.09,
      bottom   = 0.84,
      top      = 0.99,
      align_to = "plot"
    )
  
  return(Mapa_final)
}

CambiosPartners<-mapa_proveedor("Partners")
CambiosClaro<-mapa_proveedor("Claro")
CambiosMovistar<-mapa_proveedor("Movistar")
CambiosTigo<-mapa_proveedor("Tigo")

#Mapa de tigo recargado

# Tigo recargado = max entre Tigo y Movistar por municipio y año
TigoRecargado <- MaxCobertura |>
  dplyr::filter(toupper(PROVEEDOR) %in% c("TIGO", "MOVISTAR")) |>
  dplyr::group_by(AÑO, DEPARTAMENTO, MUNICIPIO, CODMPIO) |>
  dplyr::summarise(max = max(max, na.rm = TRUE), .groups = "drop") |>
  dplyr::mutate(PROVEEDOR = "Tigo recargado")

# Pegar a MaxCobertura y recalcular base_mejora
MaxCobertura_full <- bind_rows(MaxCobertura, TigoRecargado)

base_mejora <- MaxCobertura_full |>
  select(AÑO, PROVEEDOR, DEPARTAMENTO, MUNICIPIO, CODMPIO, max) |>
  pivot_wider(names_from = AÑO, values_from = max) |>
  mutate(
    `2021` = ifelse(is.na(`2021`), 0, `2021`),
    `2025` = ifelse(is.na(`2025`), 0, `2025`),
    cobertura_2025 = `2025`,
    cambio = `2025` - `2021`,
    mejora = ifelse(cambio > 0, 1, 0),
    estado = case_when(
      `2021` == 0 & `2025` == 0 ~ "Sin cobertura",
      `2021` == 0 & `2025` >  0 ~ "Nueva cobertura",
      cambio > 0                ~ "Mejora tecnológica",
      cambio < 0                ~ "Retroceso",
      cambio == 0               ~ "Sin cambio"
    )
  ) |>
  select(PROVEEDOR, DEPARTAMENTO, MUNICIPIO, CODMPIO,
         cobertura_2025, mejora, estado)

write_xlsx(base_mejora, "MejoraCobertura.xlsx")

# Verificar
with(subset(base_mejora, PROVEEDOR == "Tigo recargado"), table(estado))

CambiosTigorecargado<-mapa_proveedor("Tigo recargado")

#Despues de la fusión
rutagd <- "G:/Mi unidad/PRADATOS ANALÍTICA/1.Consultoría/2.Claro - CRC Dominancia - 2026/Documentos soporte/Graficas/Con Fusion/"

# Nombres como texto, entre comillas
graficos <- c("CambiosClaro", "CambiosMovistar", "CambiosPartners", 
              "CambiosTigo", "CambiosTigorecargado")

for(nombre in graficos){
  if(exists(nombre)){
    g <- get(nombre)
      
      ggsave(
        filename = file.path(rutagd, paste0(nombre, ".png")),
        plot     = g,
        width    = 6,    # más angosto para que no sobre espacio negro
        height   = 7,    # más alto para el mapa
        dpi      = 300,
        bg       = "white"
      
    )
    cat(nombre, "guardado exitosamente.\n")
  } else {
    cat("El objeto", nombre, "no existe en el entorno.\n")
  }
}