#include <stdio.h>
#include <stdlib.h>
#include <time.h>

// Function to generate random numbers
int rand_int(int min, int max) {
    return (rand() % (max - min + 1)) + min;
}

int main() {
    srand(time(NULL)); // seed for random number generation

    int q = 0;

    int milk = 0;
    int cows = 0;
    int hcows = 0;
    int herefords = 0;
    int fleckviehs = 0;
    int money = 5000;
    int grass = 0;

    int sells = 0;
    int revenue = 0;

    while (q == 0) {
        milk += (cows * 9);
        milk += (hcows * 3);
        milk += (herefords * (rand_int(7, 11)));
        milk += (fleckviehs * (rand_int(30, 60)));
        grass -= (cows + hcows + herefords + fleckviehs);
        if (grass < 0) {
            printf("Your %d cow(s) eaten all grass. Make sure to buy more grass next time!\n", cows + hcows + herefords + fleckviehs);
            q = 1;
            continue;
        }

        printf("\n# You have:\n");
        printf("%dL of milk,\n", milk);
        printf("%d$,\n", money);
        printf("%d cows,\n", cows);
        printf("%d highland cows,\n", hcows);
        printf("%d herefords,\n", herefords);
        printf("%d fleckviehs,\n", fleckviehs);
        printf("%d pallets of grass.\n", grass);
        printf("Press Q to quit, S to sell milk, B to buy cow, F to buy grass, Z to sell business.\n");

        char input;
        scanf(" %c", &input);

        switch (input) {
            case 'q':
                q = 1;
                break;
            case 's': {
                int sellers[5];
                for (int i = 0; i < 5; i++) {
                    sellers[i] = rand_int(0, 200) / 100; // generate random numbers between 0 and 2
                }
                for (int i = 0; i < 5; i++) {
                    printf("%d#: %d$\n", i, sellers[i]);
                }
                int bud;
                printf("Enter the seller number: ");
                scanf("%d", &bud);
                if (bud >= 0 && bud < 5) {
                    int litr;
                    printf("How many liters (Out of %dL)?\n", milk);
                    scanf("%d", &litr);
                    if (litr > 0 && litr <= milk) {
                        milk -= litr;
                        int toget = litr * sellers[bud];
                        money += toget;
                        revenue += toget;
                    } else {
                        printf("Incorrect sum\n");
                    }
                } else {
                    printf("Incorrect seller\n");
                }
                break;
            }
            case 'b': {
                printf("Select a cow breed\n");
                printf("(H)ighland 3500$, (N)ormal 900$, (E)hereford 3150$, (F)leckvieh 1190$\n");
                char breed;
                scanf(" %c", &breed);
                int sum;
                switch (breed) {
                    case 'h':
                        sum = 3500;
                        break;
                    case 'n':
                        sum = 900;
                        break;
                    case 'e':
                        sum = 3150;
                        break;
                    case 'f':
                        sum = 1190;
                        break;
                    default:
                        printf("Invalid breed\n");
                        continue;
                }
                if (money < sum) {
                    printf("Insufficient wallet\n");
                } else {
                    sells += sum;
                    money -= sum;
                    switch (breed) {
                        case 'h':
                            hcows++;
                            break;
                        case 'n':
                            cows++;
                            break;
                        case 'e':
                            herefords++;
                            break;
                        case 'f':
                            fleckviehs++;
                            break;
                    }
                }
                break;
            }
            case 'f': {
                printf("Grass costs 160$.\nProceed? (Y/N)\n");
                char proceed;
                scanf(" %c", &proceed);
                if (proceed == 'y') {
                    int hom;
                    printf("How many to buy?\n");
                    scanf("%d", &hom);
                    if (hom < 1) {
                        printf("What???\n");
                    } else {
                        int cost = hom * 160;
                        if (money < cost) {
                            printf("Earn more money and come back\n");
                        } else {
                            grass += hom;
                            sells += cost;
                            money -= cost;
                        }
                    }
                }
                break;
            }
            case 'z': {
                printf("ARE YOU SURE???\nTHIS CAN'T BE UNDONE! (Y/N)\n");
                char sure;
                scanf(" %c", &sure);
                if (sure == 'y') {
                    int tot = 0;
                    tot += milk;
                    tot += cows * 800;
                    tot += hcows * 3400;
                    tot += herefords * 3100;
                    tot += fleckviehs * 1000;
                    tot += grass * 100;
                    printf("After this action you will have %d$ (Your business cost %d$). Are you still want to do it?\n", money + tot, tot);
                    char confirm;
                    scanf(" %c", &confirm);
                    if (confirm == 'y') {
                        money += tot;
                        revenue += tot;
                        q = 1;
                    } else {
                        printf("Good.\n");
                    }
                } else {
                    printf("Very good.\n");
                }
                break;
            }
            default:
                printf("Incorrect command\n");
                break;
        }
    }
    printf("Profit: %d\n", revenue - sells);
    printf("Thanks for playing this simple prototype\n");

    return 0;
}