#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// Definindo uma estrutura para armazenar as informações dos elementos químicos
typedef struct {
    char simbolo[3];      // Símbolo do elemento
    int numeroAtomico;    // Número atômico (total de elétrons para elementos neutros)
    float massaAtomica;   // Massa atômica
    char nome[20];        // Nome do elemento
} Elemento;

// Função para limpar a tela (dependendo do sistema operacional)
void limparTela() {
    #ifdef _WIN32
        system("cls");
    #else
        system("clear");
    #endif
}

// Função para exibir a tabela periódica
void exibirTabelaPeriodica() {
    printf("\n");
    printf("╔════════════════════════════════════════════════════════════════════════════════════╗\n");
    printf("║                              Tabela Periódica Completa                              ║\n");
    printf("╚════════════════════════════════════════════════════════════════════════════════════╝\n");

    // Exibição simples da tabela periódica em formato de texto
    printf("\n");
    
    // Periodo 1
    printf("H  He\n");

    // Periodo 2
    printf("Li Be  B  C  N  O  F  Ne\n");

    // Periodo 3
    printf("Na Mg  Al Si P  S  Cl Ar\n");

    // Periodo 4
    printf("K  Ca Sc Ti V  Cr Mn Fe Co Ni Cu Zn Ga Ge As Se Br Kr\n");

    // Periodo 5
    printf("Rb Sr Y  Zr Nb Mo Tc Ru Rh Pd Ag Cd In Sn Sb I  Xe\n");

    // Periodo 6
    printf("Cs Ba La Hf Ta W  Re Os Ir Pt Au Hg Tl Pb Bi Po At Rn\n");

    // Periodo 7
    printf("Fr Ra Ac Rf Db Sg Bh Hs Mt Ds Rg Cn Uut Uuq Uup Uuh\n");

    printf("\n");
    printf("╔════════════════════════════════════════════════════════════════════════════════════╗\n");
    printf("║       A tabela está organizada por períodos e grupos. A organização é baseada em     ║\n");
    printf("║       propriedades químicas e números atômicos. Cada elemento tem seu símbolo e      ║\n");
    printf("║       número atômico.                                                               ║\n");
    printf("╚════════════════════════════════════════════════════════════════════════════════════╝\n");
}

// Função para encontrar o elemento e exibir suas informações
void consultarElemento(Elemento elementos[], int numElementos, char simbolo[]) {
    for (int i = 0; i < numElementos; i++) {
        if (strcmp(elementos[i].simbolo, simbolo) == 0) {
            printf("\nInformações sobre o elemento %s (%s):\n", elementos[i].simbolo, elementos[i].nome);
            printf("Número Atômico: %d\n", elementos[i].numeroAtomico);
            printf("Massa Atômica: %.2f\n", elementos[i].massaAtomica);
            printf("Total de Elétrons (para um átomo neutro): %d\n", elementos[i].numeroAtomico);
            return;
        }
    }
    printf("\nElemento não encontrado! Por favor, digite um símbolo válido.\n");
}

int main() {
    // Criando a tabela periódica com alguns elementos
    Elemento tabelaPeriodica[] = {
        {"H", 1, 1.008, "Hidrogênio"},
        {"He", 2, 4.0026, "Hélio"},
        {"Li", 3, 6.94, "Lítio"},
        {"Be", 4, 9.0122, "Berílio"},
        {"B", 5, 10.81, "Boro"},
        {"C", 6, 12.011, "Carbono"},
        {"N", 7, 14.007, "Nitrogênio"},
        {"O", 8, 15.999, "Oxigênio"},
        {"F", 9, 18.998, "Flúor"},
        {"Ne", 10, 20.180, "Neônio"},
        {"Na", 11, 22.990, "Sódio"},
        {"Mg", 12, 24.305, "Magnésio"},
        {"Al", 13, 26.982, "Alumínio"},
        {"Si", 14, 28.085, "Silício"},
        {"P", 15, 30.974, "Fósforo"},
        {"S", 16, 32.06, "Enxofre"},
        {"Cl", 17, 35.45, "Cloro"},
        {"Ar", 18, 39.948, "Argônio"},
        {"K", 19, 39.098, "Potássio"},
        {"Ca", 20, 40.078, "Cálcio"},
        {"Sc", 21, 44.956, "Escândio"},
        {"Ti", 22, 47.867, "Titânio"},
        {"V", 23, 50.942, "Vanádio"},
        {"Cr", 24, 52.0, "Cromo"},
        {"Mn", 25, 54.938, "Manganês"},
        {"Fe", 26, 55.845, "Ferro"},
        {"Co", 27, 58.933, "Cobalto"},
        {"Ni", 28, 58.693, "Níquel"},
        {"Cu", 29, 63.546, "Cobre"},
        {"Zn", 30, 65.38, "Zinco"}
        // Adicione mais elementos conforme necessário
    };
    
    int numElementos = sizeof(tabelaPeriodica) / sizeof(tabelaPeriodica[0]);

    while (1) {
        limparTela(); // Limpa a tela antes de começar
        
        exibirTabelaPeriodica(); // Exibe a tabela periódica
        
        // Pergunta ao usuário qual elemento ele deseja consultar
        char simbolo[3];
        printf("\nDigite o símbolo do elemento (ou 'sair' para encerrar): ");
        scanf("%s", simbolo);

        // Condição para sair do programa
        if (strcmp(simbolo, "sair") == 0) {
            printf("\nSaindo do programa...\n");
            break;
        }

        // Chama a função para consultar o elemento
        consultarElemento(tabelaPeriodica, numElementos, simbolo);
        
        // Espera o usuário pressionar Enter antes de continuar
        printf("\nPressione Enter para continuar...");
        getchar(); // Para capturar o 'Enter' extra
        getchar(); // Captura o enter após a entrada
    }

    return 0;
}