########################################################################
## Description: Script de expansão amostral para o processo de expansão
##
## Maintainer: GeoSapiens
## Author: André Santoro
## Created: 01/02/24
## Version: 0.0.1
##
## URL:
## Doc URL:
##
## Database info:
##
## Commentary: Arquivo de exemplo de script de expansão amostral. 
## Alterar conforme necessidade
########################################################################

########################################################################
###### @> Carregar pacotes acessórios extras
###### @> Lista de pacotes


########################################################################
###### @> Executar script de conexão com o BD e consultas SQL
source("/var/www/html/expansao/conf/PPW_conexao_bd.R")

# Iniciando o status code do processo com valor 0 = Sucesso
PPW_status_code <- 0

########################################################################
###### @> Informações sobre o processo ########

###### @> Data Frames disponíveis para uso
# PPW_captura: dados de captura
# PPW_expansores_estado: expansores por estado
# PPW_expansores_estado_municipio: expansores por estado e município
# PPW_expansores_municipio: expansores por município
# PPW_expansores_municipio_localidade: expansores por município e localidade
# PPW_expansores_municipio_mes: expansores por município e mês
# PPW_expansores_municipio_localidade_mes: expansores por município, localidade e mês
# PPW_acompanh_coleta: acompanhamento da coleta diária

###### @> Data Frame com o resultado da expansão para ser enviado para o BD
# O DF deve possuir apenas essas colunas e deve ter o nome de variável "PPW_resultado"
# numero_unidades_produtivas, tipo_pesca, municipio, localidade, mes, ano,
# aparelho_pesca, categoria_pescado, kg, numero_viagens

########################################################################
###### @> Script de Expansão Amostral  ########
# Altere a seção abaixo com o script de expansão amostral utilizando os
# DF disponíveis e o resultado deve ser armazenado na variável "PPW_resultado"

###### @> Script de exemplo de sumarização simples dos dados de captura
###### @> Remover colunas desnecessárias
dados <- PPW_captura %>%
    select(
        -categoria_pescado_pmap,
        -categoria_pescado_ref,
        -aparelho_pesca_n1,
        -aparelho_pesca_n2,
        -aparelho_pesca_n3,
        -aparelho_pesca_ref
    )

###### @> Sumarizar os dados de captura
resumo <- dados %>%
    group_by(municipio, localidade, tipo_pesca, mes, ano, aparelho_pesca_pmap, categoria_pescado) %>%
    summarise(
        total = sum(kg),
        ups = n_distinct(id_unidade_produtiva),
        viagens = n_distinct(id_referencia),
        preco_comercializacao = sum(kg * valor)
    ) %>%
    arrange(aparelho_pesca_pmap, municipio, .by_group = TRUE)

###### @> Organizar tabela de acordo com o BD do ProPesqWEB
PPW_resultado <- resumo %>%
    ungroup() %>%
    select(
        numero_unidades_produtivas = ups,
        tipo_pesca,
        municipio,
        localidade,
        mes,
        ano,
        aparelho_pesca = aparelho_pesca_pmap,
        categoria_pescado,
        kg = total,
        numero_viagens = viagens,
        preco_comercializacao
    )


###### @> Enviar o resultado da expansão no Banco de Dados do PPWEB ######

##### @> Criar a variável da tabela de destino
PPW_tabela_resultado <- glue("resultado_{PPW_id_conf}")

##### @> Criar o SQL que irá enviar os dados para a tabela de destino
##### @> "resultado_[]"
PPW_query_resultado <- sqlAppendTable(PPW_conexao_bd,
    PPW_tabela_resultado,
    PPW_resultado,
    row.names = FALSE
)

##### @> Enviar o SQL para execução no BD do ProPesqWEB
##### @> Nesta etapa os dados serão inseridos no banco de dados do ProPesqWEB
##### @> na tabela resultado_[] com o mesmo ID da configuração da expansão
PPW_exec_query <- dbExecute(PPW_conexao_bd, PPW_query_resultado)

##### @> Fechar a conexão com BD do ProPesqWEB
dbDisconnect(PPW_conexao_bd)
PPW_msg_fim <- "Procedimentos finalizados: "

message(PPW_msg_fim, Sys.time())

quit(save = "no", status = PPW_status_code)

########################################################################
