#!/bin/bash

# Verifica se o arquivo CSV e o prefixo do arquivo SQL foram fornecidos como argumentos
if [ "$#" -ne 2 ]; then
  echo "Uso: $0 <input.csv> <output_prefix>"
  exit 1
fi

input_csv=$1
output_prefix=$2

# Verifica se o arquivo CSV existe
if [ ! -f "$input_csv" ]; then
  echo "Arquivo CSV não encontrado!"
  exit 1
fi

# Corrige caracteres específicos
corrected_csv="${input_csv%.csv}_corrigido.csv"
sed -e 's/ﾁ/Á/g' \
    -e 's/Ã©/é/g' \
    -e 's/Ã­/í/g' \
    -e 's/Ã¡/á/g' \
    -e 's/Ã³/ó/g' \
    -e 's/Ãº/ú/g' \
    -e 's/Ã£/ã/g' \
    -e 's/Ã§/ç/g' \
    -e 's/Ã¨/è/g' \
    -e 's/Ã‡/Ç/g' \
    "$input_csv" > "$corrected_csv"

echo "Arquivo corrigido salvo como $corrected_csv"

# Inicializa variáveis
batch_size=50
batch_number=1
line_count=0
current_cpfs=""
output_sql="${output_prefix}_${batch_number}.sql"

# Inicializa o arquivo SQL
create_sql_header() {
  echo "USE clicklifeesqlprd;" > "$output_sql"
  echo "" >> "$output_sql"
  echo "BEGIN TRANSACTION;" >> "$output_sql"
}

create_sql_footer() {
  echo "" >> "$output_sql"
  echo "COMMIT;" >> "$output_sql"
  echo "" >> "$output_sql"
  echo "SELECT * FROM dbo.Colaboradores WHERE Cpf IN (" >> "$output_sql"

  # Adiciona os CPFs ao final do arquivo SQL sem vírgula extra
  if [ -n "$current_cpfs" ]; then
    echo "${current_cpfs%,}" >> "$output_sql"
  fi

  echo ");" >> "$output_sql"
}

process_line() {
  local cpf=$(echo "$1" | sed 's/[^0-9]//g')
  local nome=$(echo "$2" | sed "s/'/''/g")

  # Pega somente a parte do nome antes do hífen
  nome=$(echo "$nome" | cut -d'-' -f1)

  # Verifica se o CPF tem menos de 11 dígitos e preenche com zeros à esquerda
  if [ ${#cpf} -lt 11 ]; then
    cpf=$(printf "%011d" "$cpf")
  fi

  # Adiciona uma linha de inserção ou atualização ao arquivo SQL
  echo "IF EXISTS (SELECT 1 FROM dbo.Colaboradores WHERE Cpf = '$cpf')" >> "$output_sql"
  echo "BEGIN" >> "$output_sql"

  # Verifica se o nome não está vazio antes de atualizar
  if [ -n "$nome" ]; then
    echo "  UPDATE dbo.Colaboradores" >> "$output_sql"
    echo "  SET SituacaoColaborador = 'Inativo', EmpresaId = 9152" >> "$output_sql"
    echo "  WHERE Cpf = '$cpf';" >> "$output_sql"
  else
    echo "  UPDATE dbo.Colaboradores" >> "$output_sql"
    echo "  SET SituacaoColaborador = 'Inativo', EmpresaId = 9152" >> "$output_sql"
    echo "  WHERE Cpf = '$cpf';" >> "$output_sql"
  fi

  echo "END" >> "$output_sql"
  echo "ELSE" >> "$output_sql"
  echo "BEGIN" >> "$output_sql"
  echo "  INSERT INTO dbo.Colaboradores (Cpf, SituacaoColaborador, EmpresaId, DataCriacao)" >> "$output_sql"
  echo "  VALUES ('$cpf', 'Inativo', 9152, '2024-08-20 15:00:00');" >> "$output_sql"
  echo "END" >> "$output_sql"

  # Adiciona o CPF atual à lista de CPFs
  current_cpfs="${current_cpfs}'$cpf',"
}

# Lê o arquivo CSV corrigido linha por linha e divide em lotes
while IFS=';' read -r cpf nome; do
  if [ $line_count -eq 0 ]; then
    create_sql_header
  fi

  process_line "$cpf" "$nome"

  line_count=$((line_count + 1))

  if [ $line_count -ge $batch_size ]; then
    create_sql_footer
    echo "Arquivo SQL gerado: $output_sql"

    # Prepara o próximo arquivo SQL
    batch_number=$((batch_number + 1))
    output_sql="${output_prefix}_${batch_number}.sql"
    line_count=0
    current_cpfs=""
    create_sql_header
  fi
done < "$corrected_csv"

# Processa o último lote, se houver
if [ $line_count -gt 0 ]; then
  create_sql_footer
  echo "Arquivo SQL gerado: $output_sql"
fi

# Executa todos os arquivos SQL gerados
for sql_file in ${output_prefix}_*.sql; do
  echo "Executando $sql_file"
  sqlcmd -S clicklifeesqlsrvprd.database.windows.net -d clicklifeesqlprd -U adminclicklifee -P 9iVgJeJ4djLj_aAzP3lxiakoGP2p8_j8XWzR -i "$sql_file"
done

# Exclui os arquivos SQL gerados
rm *.sql
