###### 0. Informações importantes ######
# Script com os comandos para realizar a conexão com o banco de dados
## consultar as tabelas com os dados amostrais e salvar em um dataframe

# O comando para executar o script do R no terminal do Linux é:
# Rscript --vanilla PPW_expansao.R conf_conexao_BD.json 5_parametros.json

## Esse comando irá fazer uma chamada para o sistema operacional 
## executar o ambiente do R, alimentar o ambiente com as variáveis 
## dos dois arquivos adicionais informados, executar o Script e
## fechar o ambiente do R. Esse é o comando que será enviado pelo
## ProPesqWEB, alterando apenas o arquivo de parametros que terá 
## o ID (neste exemplo 5) de acordo com o ID da configuração 
## criada pelo usuário no ProPesqWEB

###### Atenção - Atenção - Atenção - Atenção - Atenção - Atenção -  ######
# Neste script alterar apenas o caminho da pasta de trabalho
## Todas as outras informações não devem ser alteradas

###### 1. Preparar o script ######

## Aceitar parâmetros no terminal como arquivos externos
### Esse comando permite o script a ler as variáeis dos arquivos
### que foram infomados no comando de execução do script
PPW_args = commandArgs(trailingOnly=TRUE)

## Diretório padrão de trabalho
### Adicionar o caminho para a pasta de trabalho
setwd("/var/www/html/expansao/conf")

# Mensagem inicial
PPW_msg_fim <- "Procedimentos inciados: "

message(PPW_msg_fim, Sys.time())

# Instalar pacotes necessários
## Conexão PostrgeSQL
##install.packages("RPostgreSQL", dependencies = TRUE)
## Ferramentas de maninupalção
##install.packages("tidyverse", dependencies = TRUE)
## Criar variáveis e string 
#install.packages("glue", dependencies =  TRUE)
## Gerenciar arquivos JSON
##install.packages("jsonlite", dependencies = TRUE)
## Adicionar abaixo os pacotes não identificados na lista acima
# Instalar pacotes necessários

# carregar os pacotes necessários
library(RPostgreSQL)
library(dplyr)
library(glue)
library(jsonlite)


###### 2. Ler arquivos JSON externos ######

# Ler arquivos JSON com os dados de acesso ao BD

## Pegar parâmetros do arquivo informado no comando
### Método que vai ser utilizado em produção pelo terminal
PPW_conf_con <- fromJSON(PPW_args[1], simplifyDataFrame = TRUE)

## Pegar parâmetros do arquivo diretamente
### Método alternativo para testes, lendo os arquivos 
## auxiliares na execução do script
# PPW_conf_con <- fromJSON("conf_conexao_BD.json", simplifyDataFrame = TRUE)


# Ler arquivos YAML com os parâmetros da expansão
## Pegar parâmetros do arquivo informado no comando
### Método que vai ser utilizado em produção
### passando os arquivos auxiliares na execução do script
PPW_para <- fromJSON(PPW_args[2], simplifyDataFrame = TRUE)

## Pegar parâmetros do arquivo diretamente
### Método alternativo para testes, lendo os arquivos
### auxiliares direto da pasta de trabalho
# PPW_para <- fromJSON("2_parametros.json", simplifyDataFrame = TRUE)


###### 3. Conectar ao Banco de Dados do ProPesqWEB ######

# Variáveis de conexão ao BD
PPW_pgdrv <- dbDriver(drvName = "PostgreSQL")
PPW_bd <- PPW_conf_con$banco
PPW_host <- PPW_conf_con$host
PPW_port <- PPW_conf_con$port
PPW_user <- PPW_conf_con$user
PPW_pwd <- PPW_conf_con$pwd

# Criar conexão ao BD
PPW_conexao_bd <- DBI::dbConnect(PPW_pgdrv,
                                 dbname = PPW_bd,
                                 host = PPW_host,
                                 port = PPW_port,
                                 user = PPW_user,
                                 password = PPW_pwd
)

###### 4. Consumir os dados das tabelas do BD ######

# Identificar id das tabelas referentes a configuração da expansão criada
## ID da variável presente no arquivo parametros_5.yml"
PPW_id_conf <- PPW_para$id

# Criar Dataframe para cada tabela criada com os dados amostrais que serão expandidos
## Tabela referente a configuração de expansão de ID do arquivo "parametros_12.yml"

# Criar a variável do nome da tabela com o ID dinâmico
## Tabela captura
PPW_var_captura <- glue('captura_{PPW_id_conf}')

## Tabela expansores
PPW_var_expansores_estado <- 
  glue('expansores_estado_{PPW_id_conf}')

PPW_var_expansores_estado_municipio <- 
  glue('expansores_estado_municipio_{PPW_id_conf}')

PPW_var_expansores_municipio <- 
  glue('expansores_municipio_{PPW_id_conf}')

PPW_var_expansores_municipio_localidade <- 
  glue('expansores_municipio_localidade_{PPW_id_conf}')

PPW_var_expansores_municipio_mes <- 
  glue('expansores_municipio_mes_{PPW_id_conf}')

PPW_var_expansores_municipio_localidade_mes <- 
  glue('expansores_municipio_localidade_mes_{PPW_id_conf}')

## Tabela acompanhamento de coleta diaria
PPW_var_acompanh_coleta <- glue('acompanhamento_coleta_{PPW_id_conf}')

# Query SQL de consulta ao BD para as tabelas dos dados amostrais que 
## serão expandidos 
## Criando o SQL com a variável tabela criada
### Tabela captura
PPW_query_captura <- 
  glue_sql("SELECT * FROM {`PPW_var_captura`}", .con = PPW_conexao_bd)

### Tabela expansores
PPW_query_expansores_estado <- 
  glue_sql("SELECT * FROM {`PPW_var_expansores_estado`}", .con = PPW_conexao_bd)

PPW_query_expansores_estado_municipio <- 
  glue_sql("SELECT * FROM {`PPW_var_expansores_estado_municipio`}", 
           .con = PPW_conexao_bd)

PPW_query_expansores_municipio <- 
  glue_sql("SELECT * FROM {`PPW_var_expansores_municipio`}", 
           .con = PPW_conexao_bd)

PPW_query_expansores_municipio_localidade <- 
  glue_sql("SELECT * FROM {`PPW_var_expansores_municipio_localidade`}", 
           .con = PPW_conexao_bd)

PPW_query_expansores_municipio_mes <- 
  glue_sql("SELECT * FROM {`PPW_var_expansores_municipio_mes`}", 
           .con = PPW_conexao_bd)

PPW_query_expansores_municipio_localidade_mes <- 
  glue_sql("SELECT * FROM {`PPW_var_expansores_municipio_localidade_mes`}", 
           .con = PPW_conexao_bd)
### Tabela acompanhamento de coleta
PPW_query_acompanh_coleta <- 
  glue_sql("SELECT * FROM {`PPW_var_acompanh_coleta`}", .con = PPW_conexao_bd)

# Enviando a consulta SQL para o banco e salvando no dataframe
## Dataframe da tabela captura
PPW_captura <- dbGetQuery(PPW_conexao_bd, PPW_query_captura)
## Dataframe da tabela expansores
PPW_expansores_estado <- 
  dbGetQuery(PPW_conexao_bd, PPW_query_expansores_estado)

PPW_expansores_estado_municipio <- 
  dbGetQuery(PPW_conexao_bd, PPW_query_expansores_estado_municipio)

PPW_expansores_municipio <- 
  dbGetQuery(PPW_conexao_bd, PPW_query_expansores_municipio)

PPW_expansores_municipio_localidade <- 
  dbGetQuery(PPW_conexao_bd, PPW_query_expansores_municipio_localidade)

PPW_expansores_municipio_mes <- 
  dbGetQuery(PPW_conexao_bd, PPW_query_expansores_municipio_mes)

PPW_expansores_municipio_localidade_mes <- 
  dbGetQuery(PPW_conexao_bd, PPW_query_expansores_municipio_localidade_mes)

## Dataframe da tabela acompanhamento de coleta
PPW_acompanh_coleta <- dbGetQuery(PPW_conexao_bd, PPW_query_acompanh_coleta)












