/* Para cada apartado siguiente escoger si es mejor una acción o una función
y deﬁnir su cabecera.
- Dadas las dimensiones de una pared (altura y anchura)
y el precio de pintura por metro cuadrado,
determinar el coste total de pintura necesario para pintar la pared.
- Dado el consumo total de agua acumulado
desde el mes de enero hasta junio (ambos incluidos),
leer por el canal estándar el consumo del resto de meses
(desde julio a diciembre, ambos incluidos),
y retornar acumulado al total del consumo de los 6 primeros meses.
- Dados dos números enteros intercambiad los valores de ambas variables siempre
que ambas sean diferentes de cero.
- Dado un entero retornad la suma de sus divisores.

Declarar las variables necesarias para llamar a las acciones del ejercicio
anterior e indicar cómo se llamarían. */

#include <stdio.h>

// Función para calcular el coste total de pintura necesario para pintar una pared
float calcularCostePintura(float altura, float anchura, float precio_pintura)
{
    return altura * anchura * precio_pintura;
}

// Acción para calcular el consumo total de agua acumulado
float calcularConsumoAgua(float *consumo_actual, int *meses_consumo_actual, int *ano_consumo_actual)
{
    float consumo_mes;
    int meses_a_introducir;

    printf("¿Cuántos meses quieres introducir? ");
    scanf("%d", &meses_a_introducir);

    for (int i = 1; i <= meses_a_introducir; i++)
    {
        if (*meses_consumo_actual == 12)
        {
            *meses_consumo_actual = 1;
            (*ano_consumo_actual)++;
        }
        else
        {
            (*meses_consumo_actual)++;
        }

        printf("Introduce el consumo de agua del mes %d: ", *meses_consumo_actual);
        scanf("%f", &consumo_mes);
        *consumo_actual += consumo_mes;
    }
}

// Función (con puntero) para obtener el nombre del mes
char *calcularMesString(int mes)
{
    char *meses[] = {"Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"};
    return meses[mes - 1];
}

// Acción para intercambiar los valores de dos números enteros
void intercambiarValores(int *a, int *b)
{
    int temp;

    if (*a != 0 && *b != 0)
    {
        temp = *a;
        *a = *b;
        *b = temp;
    }
}

// Función para calcular la suma de los divisores de un número entero
int sumaDivisores(int n)
{
    int suma = 0;
    int i;

    for (i = 1; i <= n; i++)
    {
        if (n % i == 0)
        {
            suma += i;
        }
    }

    return suma;
}

// Función principal
int main()
{
    int opcion;
    float consumo_actual = 60;
    int meses_consumo_actual = 6;
    int ano_consumo_actual = 2021;

    do
    {
        printf("\n[+] Elige una opción:\n");
        printf("1. Calcular el coste total de pintura necesario para pintar una pared\n");
        printf("2. Calcular el consumo total de agua acumulado\n");
        printf("3. Intercambiar los valores de dos números enteros\n");
        printf("4. Calcular la suma de los divisores de un número entero\n");
        printf("5. Salir\n\n");
        printf("> ");
        scanf("%d", &opcion);

        switch (opcion)
        {
        case 1:
        {
            float altura, anchura, precio_pintura;
            printf("\n[+] Introduce la altura de la pared: ");
            scanf("%f", &altura);
            printf("[+] Introduce la anchura de la pared: ");
            scanf("%f", &anchura);
            printf("[+] Introduce el precio de la pintura por metro cuadrado: ");
            scanf("%f", &precio_pintura);

            float coste_pintura = calcularCostePintura(altura, anchura, precio_pintura);
            printf("\n[+] El coste total de pintura necesario para pintar la pared es de %.2f euros\n", coste_pintura);
            break;
        }

        case 2:
        {
            calcularConsumoAgua(&consumo_actual, &meses_consumo_actual, &ano_consumo_actual);
            char *nombre_mes = calcularMesString(meses_consumo_actual);
            printf("\n[+] El consumo total de agua acumulado hasta %s del año %d es de %.2f litros\n", nombre_mes, ano_consumo_actual, consumo_actual);
            break;
        }

        case 3:
        {
            int num1, num2;
            printf("\n[+] Introduce el primer número entero: ");
            scanf("%d", &num1);
            printf("[+] Introduce el segundo número entero: ");
            scanf("%d", &num2);

            intercambiarValores(&num1, &num2);
            printf("\n[+] Los valores intercambiados son: %d y %d\n", num1, num2);
            break;
        }

        case 4:
        {
            int numero;
            printf("[+] Introduce un número entero: ");
            scanf("%d", &numero);

            int suma_divisores = sumaDivisores(numero);
            printf("\n[+] La suma de los divisores de %d es: %d\n", numero, suma_divisores);
            break;
        }

        case 5:
            printf("\n[!] Saliendo...\n");
            break;

        default:
            printf("[!] Opción no válida\n");
            break;
        }

    } while (opcion != 5);

    return 0;
}
