#!/bin/bash

# Função para exibir o menu
exibir_menu() {
    echo -e "\e[1;33m===== MENU v2Back_n_IPTV =====\e[0m"
    echo -e "\e[1;36m1. EXIBE LINHAS COM DIAS <= 0 DO ./v2Back_n_IPTVi\e[0m"
    echo -e "\e[1;36m2. REMOVE LINHAS COM DIAS <= 0 DO ./v2Back_n_IPTVi\e[0m"
    echo -e "\e[1;36m3. REMOVE LINHAS EM BRANCO DO ./v2Back_n_IPTV\e[0m"
    echo -e
    echo -e "\e[1;36m4. EXECUTA SUBTRACAO EM ./v2Back_n_IPTV\e[0m"
    echo -e "\e[1;36m5. IMPRIME O FILE ./v2Back_n_IPTV\e[0m"
    echo -e
    echo -e "\e[1;36m6. RELOGIO QPRA O ./pipeSubtrator.sh + ./removeBlank.sh\e[0m"
    echo -e
    echo -e "\e[1;33m====== WPANEL _V2 USER LOOKUP/OP =====\e[0m"
    echo -e "\e[1;33m*Its need ./v2snap(carregado em outrora) n ./v2snap2(carregado no momento da OP) files for OPs\e[0m"
    echo -e "\e[1;36ma. Imprimir ./v2snap(outrora)\e[0m"
    echo -e "\e[1;36mc. Carrega ./v2snap com WPanel _v2 users\e[0m"
    echo -e "\e[1;36mb. Listar _v2 live users e carrega ./v2snap2 for OP. Also  check new created user(since last ./v2snap load)\e[0m"
    echo -e "\e[1;36md. (OP) Quais _v2 users foram apagados desde ./v2snap?\e[0m"
    echo -e "\e[1;33m***** SYNC DE CONEXAO V2 *****\e[0m"
    echo -e "\e[1;33mg. Deploy sUUID.sh script to UUID extraction OP\e[0m"
    echo -e "\e[1;36m7. OP Extrai IDs de ./v2Back_n_IPTV e config.json\e[0m"
    echo -e
    echo -e "\e[1;33m===== ONLINE/MULTICONN DETECTOR =====\e[0m"
    echo -e "\e[1;36m8. VERIFICAR CONEXOES SIMULTANEAS SCRIPTING******\e[0m"
    echo -e
    echo -e "\e[1;33m===== FTP_RECEPTOR/SOURCE SCRIPTING INSTALL =====\e[0m"
    echo -e "\e[1;36m9.  RECEPTOR Deploy scriptGet getVPSFile restoremacro onOffLimiter\e[0m"
    echo -e "\e[1;33m*install yafc n do manual exec to establish scriptting!*\e[0m"
    echo -e "\e[1;33m**Also deploy passwd.sh for script cycle passwd restart :P\e[0m"
    echo -e "\e[1;36m11. SOURCE Deploy scriptCreate createmacro onOffLimiter\e[0m"
    echo -e "\e[1;36m12. SOURCE Inject Wpanel code to block bad usernames*****\e[0m"
    echo -e "\e[1;33m**BITBIN->FTP_SYNC_Netplan_n_InfosMISC to stablish VSFTPD server\e[0m"
    echo -e
    echo -e "\e[1;33m13. Adjust /bin/limiter time 'sleep 5s'\e[0m"
    echo -e "\e[1;33m*Dont forget to check CHMOD777 all this shit*\e[0m"

    echo -e "\e[1;36m0. Sair\e[0m"
    echo -e "\e[1;33m================\e[0m"
    echo -n "Escolha uma opção: "
}

# Loop principal do menu
while true; do
    exibir_menu

    read opcao

    case $opcao in
        1)
            # Nome do arquivo de entrada
                arquivo="./v2Back_n_IPTV"

                # Loop através das linhas do arquivo de entrada
                while IFS= read -r linha; do
                    # Use um comando regex para encontrar os valores entre colchetes
                    valores_entre_colchetes=$(echo "$linha" | grep -o '\[[^]]*\]')

                    # Loop através dos valores encontrados
                    while IFS= read -r valor; do
                        # Remova colchetes e verifique se o valor é menor que ou igual a 0
                        valor_sem_colchetes=$(echo "$valor" | tr -d '[]')
                        if [ "$valor_sem_colchetes" -le 0 ]; then
                            # Se for menor ou igual a 0, exiba essa linha
                            echo "$linha"
                            break
                        fi
                    done <<< "$valores_entre_colchetes"

                done < "$arquivo"
                read
            ;;
        2)
        # Nome do arquivo de entrada
                arquivo="./v2Back_n_IPTV"

                # Crie um arquivo temporário para armazenar as linhas válidas
                tempfile=$(mktemp)

                # Loop através das linhas do arquivo de entrada
                while IFS= read -r linha; do
                    # Use um comando regex para encontrar os valores entre colchetes
                    valores_entre_colchetes=$(echo "$linha" | grep -o '\[[^]]*\]')

                    # Loop através dos valores encontrados
                    while IFS= read -r valor; do
                        # Remova colchetes e verifique se o valor é menor que 0
                        valor_sem_colchetes=$(echo "$valor" | tr -d '[]')
                        if [ "$valor_sem_colchetes" -le 0 ]; then
                            # Se for menor que 0, não copie essa linha para o arquivo temporário
                            continue 2
                        fi
                    done <<< "$valores_entre_colchetes"

                    # Se chegou aqui, a linha é válida, copie-a para o arquivo temporário
                    echo "$linha" >> "$tempfile"

                done < "$arquivo"

                # Substitua o arquivo original pelo arquivo temporário
                mv "$tempfile" "$arquivo"

                # Exibindo o arquivo modificado
                cat "$arquivo"
                read
            ;;
        3)
                # Nome do arquivo de entrada
                arquivo_origem="./v2Back_n_IPTV"

                # Nome do arquivo temporário
                arquivo_temporario="temp.txt"

                # Remove linhas em branco do arquivo de origem
                grep -v '^$' "$arquivo_origem" > "$arquivo_temporario"

                # Substituir o arquivo de origem pelo arquivo temporário
                mv "$arquivo_temporario" "$arquivo_origem"

                # Mensagem de conclusão
                echo "Linhas em branco removidas com sucesso do arquivo $arquivo_origem."
            ;;
        4)
            # Nome do arquivo de entrada
                arquivo_origem="./v2Back_n_IPTV"

                # Nome do arquivo temporário
                arquivo_temporario="temp.txt"

                # Loop para processar cada linha do arquivo de origem
                while IFS= read -r linha; do
                  valor_coluna1=$(echo "$linha" | awk '{print $1}')
                  valor_colchetes=$(echo "$linha" | awk -F'[][]' '{print $2}')
                  novo_valor_colchetes=$((valor_colchetes - 1))
                  linha_modificada=$(echo "$linha" | sed "s/\[$valor_colchetes\]/\[$novo_valor_colchetes\]/")
                  echo "$linha_modificada"
                done < "$arquivo_origem" > "$arquivo_temporario"

                # Substituir o arquivo de origem pelo arquivo temporário
                mv "$arquivo_temporario" "$arquivo_origem"
            ;;
        5)
            cat ./v2Back_n_IPTV
            read
            ;;
        6)
            echo -e "\e[1;33mAdd linha à seguir, que programa o bang pra 1:15AM todo dia\e[0m"
            echo -e "\e[1;36m15 1 * * * /bin/cat v2Back_n_IPTV | ./pipeSubtrator.sh \e[0m"
            echo -e "\e[1;36m16 1 * * * ./removeBlank.sh\e[0m"
            echo -e "\nPressione qualquer tecla para executar CRONTAB -E..."

            echo -e "                # Nome do arquivo de entrada
                arquivo_origem=\"./v2Back_n_IPTV\"

                # Nome do arquivo temporário
                arquivo_temporario=\"temp.txt\"

                # Remove linhas em branco do arquivo de origem
                grep -v '^$' \"\$arquivo_origem\" > \"\$arquivo_temporario\"

                # Substituir o arquivo de origem pelo arquivo temporário
                mv \"\$arquivo_temporario\" \"\$arquivo_origem\"

                # Mensagem de conclusão
                echo \"Linhas em branco removidas com sucesso do arquivo \$arquivo_origem.\"
" > ./removeBlank.sh
            chmod 777 ./removeBlank.sh
            read
            crontab -e
            ;;
        g)
            echo -e "#!/bin/bash
                # Função para extrair e imprimir as strings do bloco1.txt
                extract_strings_from_bloco1() {
                  while IFS=\"|\" read -r uuid _; do
                    # Remove espaços em branco no início e no fim da string
                    uuid=\$(echo \"\$uuid\" | tr -d ' ')
                    # Verifica se a string corresponde ao formato esperado
                    if [[ \$uuid =~ ^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$ ]]; then
                      echo \"\$uuid\"
                    fi
                  done < bloco1.txt
                }

                # Função para extrair e imprimir as strings do bloco2.txt
                extract_strings_from_bloco2() {
                  # Use grep com uma expressão regular para extrair as UUIDs
                  grep -oE '[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}' bloco2.txt
                }

                # Chamando as funções para extrair e imprimir as strings
                echo \"Strings do v2Back_n_IPTV:\"
                extract_strings_from_bloco1

                echo \"Strings do config.json:\"
        extract_strings_from_bloco2" > ./sUUID.sh
            chmod 777 ./sUUID.sh
            ;;
        7)
            cat /root/v2Back_n_IPTV > bloco1.txt
            cat /etc/v2ray/config.json > bloco2.txt
            ./sUUID.sh
            read
             echo -e "\e[1;33m===== Linhas que aparecem apenas 1 vez =====\e[0m"
            ./sUUID.sh | sort | uniq -c | awk '$1 == 1 {print $2}'
            read
            ;;
        8)
            ./script2.sh # Substitua script2.sh pelo nome do seu segundo script
            ;;
        9)
            echo "   #!/bin/bash
   while :
   do
        ./getVPSFile.sh | yafc ftpuser:'~L8z65xL=8y]!rs'@192.99.252.3
        chmod 777 ./backup.vps
        ./restoremacro.sh | menu
        ./onOffLimiter.sh | menu
        ./passwd.sh | passwd
        sync; echo 1 > /proc/sys/vm/drop_caches
        sleep 8
        sync; echo 2 > /proc/sys/vm/drop_caches
   done
" > ./scriptGet.sh
            echo -e "    #!/bin/bash
            sleep 1
            echo \"ls\"
            sleep 1
            echo \"get backup.vps\"
            sleep 1
            echo \"y\"
            sleep 1
            echo \"exit\"
" > ./getVPSFile.sh
            echo -e "    #!/bin/bash
            echo \"15\"
            echo \"2\"
            sleep 4
            echo -ne \"\n\"
            echo \"0\"
            echo \"0\"
            echo \"0\"
" > ./restoremacro.sh
            echo -e "    #!/bin/bash
            echo \"17\"
            sleep 8
            echo \"17\"
            sleep 3
            echo \"0\"
            echo \"0\"
            echo \"0\"
" > ./onOffLimiter.sh
            echo "#!/bin/bash
                echo 'lbadwath'
                sleep 1
                echo 'lbadwath'
                sleep 1
" > ./passwd.sh
            chmod 777 *.sh
            ;;
        11)
            echo "#!/bin/bash
   while :
   do
        ./createmacro.sh | menu
        cp -rf ./backup.vps /home/ftpuser/ftp/files/
        chown ftpuser:ftpuser /home/ftpuser/ftp/files/backup.vps
        chmod 777 /home/ftpuser/ftp/files/backup.vps
        #./limiterOvpn.sh
        ./onOffLimiter.sh | menu
        sync; echo 1 > /proc/sys/vm/drop_caches
        sleep 3
        sync; echo 2 > /proc/sys/vm/drop_caches
   done
" > ./scriptCreate.sh
            echo -e "#!/bin/bash
            echo \"17\"
            sleep 8
            echo \"17\"
            sleep 3
            echo \"0\"
            echo \"0\"
            echo \"0\"
" > ./onOffLimiter.sh
            echo -e "#!/bin/bash
            # Nome do arquivo onde o valor será armazenado
            arquivo='contador.txt'

            # Se o arquivo não existir, cria e inicializa com 0
            if [ ! -f \"\$arquivo\" ]; then
               echo 0 > \"\$arquivo\"
            fi

            # Lê o valor atual do arquivo
            valor=\$(<\"\$arquivo\")

            # Incrementa o valor
            echo \$(( \$(cat contador.txt) + 1 )) > contador.txt

            echo \"15\"
            sleep 1
            echo \"1\"
            sleep 3
            echo \"n\"

           # Verifica se o valor atingiu 30
           if [ \"\$valor\" -gt 30 ]; then
              echo \"Valor 30 atingido\"
              # Reseta o valor para 0
              echo \"0\" > contador.txt
              echo \"8\"
              sleep 6
           fi

           echo \"n\"
           echo \"0\"
           echo \"0\"
           echo \"0\"
" > ./createmacro.sh
            ;;
        12)
            echo -e "BITBIN -> BLOCK_User_bad_string_n_MySQL_Trhigger_String_n_SSHLimiter"
            read
            ;;
        13)
            vim /bin/limiter
            ;;
        0)
            echo "Saindo..."
            exit 0
            ;;
        a)
            cat ./v2snap
            read
            ;;
        b)
                # Defina o caminho para o arquivo /etc/passwd
                passwd_file="/etc/passwd"

                # Inicialize uma variável para contar os usuários
                count=0
                echo "" > ./v2snap2
                # Use um loop while para ler cada linha do arquivo /etc/passwd
                while IFS= read -r line; do
                    username=$(echo "$line" | cut -d: -f1)
                    if [[ "$username" == *_v2* || "$username" == *_V2* ]]; then
                        echo "$username"
                        echo "$username" >> ./v2snap2
                        chage -l "$username" | grep "Account expires" | cut -d: -f2- | sed 's/^[[:space:]]*//'
                        ((count++))
                    fi
                done < "$passwd_file"

                # Imprima o número total de usuários encontrados
                echo "Número total de usuários que terminam em '_v2' ou '_V2': $count"
                read
            ;;
        c)
                # Defina o caminho para o arquivo /etc/passwd
                passwd_file="/etc/passwd"

                # Inicialize uma variável para contar os usuários
                count=0
                echo "" > ./v2snap
                # Use um loop while para ler cada linha do arquivo /etc/passwd
                while IFS= read -r line; do
                    username=$(echo "$line" | cut -d: -f1)
                    if [[ "$username" == *_v2* || "$username" == *_V2* ]]; then
                        echo "$username"
                        echo "$username" >> ./v2snap
                        chage -l "$username" | grep "Account expires" | cut -d: -f2- | sed 's/^[[:space:]]*//'
                        ((count++))
                    fi
                done < "$passwd_file"

                # Imprima o número total de usuários encontrados
                echo "Número total de usuários que terminam em '_v2' ou '_V2': $count"
                read
            ;;
        d)
                file1="./v2snap"
                file2="./v2snap2"

                # Verifica se os arquivos existem
                if [ ! -e "$file1" ] || [ ! -e "$file2" ]; then
                    echo "Um ou ambos os arquivos não existem."
                    exit 1
                fi

                # Lê os usuários do arquivo v2snap e armazena em uma matriz
                mapfile -t users_file1 < "$file1"

                # Lê os usuários do arquivo v2snap2 e armazena em outra matriz
                mapfile -t users_file2 < "$file2"

                # Percorre a matriz de usuários do v2snap
                for user1 in "${users_file1[@]}"; do
                    # Verifica se o usuário não está presente no v2snap2
                    if ! [[ " ${users_file2[*]} " =~ " $user1 " ]]; then
                        echo "Usuário exclusivo em $file1: $user1"
                    fi
                done
                read
            ;;
        *)
            echo "Opção inválida! Pressione Enter para continuar..."
            read
            ;;
    esac
done