// Programa simple en C para implementar un diario íntimo
// por ~peron
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
 
#define MAX_ENTRY_SIZE 1500
 
// Función para agregar una nueva entrada
void addEntry()
{
    char entry[MAX_ENTRY_SIZE];
    printf(
        "Mecanografía tu nueva entrada del diario (1500 caracteres como máximo):\n");
    getchar(); // Consume el carácter newline almacenado en
               // el buffer
    fgets(entry, sizeof(entry), stdin);
 
    // Obtiene la fecha y hora actual
    time_t t = time(NULL);
    struct tm* tm_info = localtime(&t);
    char timestamp[20];
    strftime(timestamp, sizeof(timestamp),
             "%d-%m-%Y %H:%M:%S", tm_info);
 
    // Agrega la entrada al fichero de diario
    FILE* file = fopen("diario_intimo.txt", "a");
    if (file != NULL) {
        fprintf(file, "[%s]\n%s\n\n", timestamp, entry);
        fclose(file);
        printf("Entrada exitosamente agregada!\n");
    }
    else {
        printf("Error: No pude abrir el fichero del diario.\n");
    }
}
 
// Función para presentar todos las entradas del diario
void viewEntries()
{
    char line[MAX_ENTRY_SIZE];
    FILE* file = fopen("diario_intimo.txt", "r");
    if (file != NULL) {
        while (fgets(line, sizeof(line), file) != NULL) {
            printf("%s", line);
        }
        fclose(file);
    }
    else {
        printf("\nError: No pude abrir el fichero del diario.\n");
    }
}
 
// Código principal
int main()
{
    int choice;
 
    // bucle que corre hasta elegir salir.
    do {
        // main dashboard
        printf("Aplicación de Diario Íntimo en texto plano\n");
        printf("\n");
        printf(" 1. Agregar Entrada al Diario Íntimo\n");
        printf(" 2. Ver entradas del Diario Íntimo\n");
        printf(" 3. Salir\n");
        printf("\n");
        printf("Elija una opción: ");
        scanf("%d", &choice);
 
        // selección de opcion
        switch (choice) {
        case 1:
            addEntry();
            break;
        case 2:
            viewEntries();
            break;
        case 3:
            printf("Saliendo de la aplicación del Diario. "
                   "Adios!\n");
            break;
        default:
            printf("Opción inválida. Por favor ingrese una opción "
                   "correcta.\n");
        }
    } while (choice != 3);
 
    return 0;
}