/******************************************************************************

Welcome to GDB Online.
GDB online is an online compiler and debugger tool for C, C++, Python, Java, PHP, Ruby, Perl,
C#, OCaml, VB, Swift, Pascal, Fortran, Haskell, Objective-C, Assembly, HTML, CSS, JS, SQLite, Prolog.
Code, Compile, Run and Debug online from anywhere in world.

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

#define MAX_SIZE 30
#define MAX_NAZIV_SIROVINE 31

typedef struct sirovina_st
{
    char naziv_sirovine[MAX_NAZIV_SIROVINE];
    unsigned limit_za_velikoprodaju;
    double maloprodajna_cena;
    double velikoprodajna_cena;
} SIROVINA;

void ucitaj_sirovine(FILE *ulazna, SIROVINA *s, int *pn);
void ispisi_sirovine(FILE *izlazna, SIROVINA *s, int n, unsigned kg);

// Zadatak je iz zbirke koja se nalazi na: https://programski-jezici-i-strukture-podataka.github.io/zbirka-zadataka/zadaci/2021/t34/pita-sa-sirom/index.html

// sa echo $? u terminalu mozete proveriti exit code programa
int main(int argc, char **argv)
{
    if(argc != 4)
    {
        printf("Primer poziva programa: ./pekara sirovine.txt cene.txt 120\n");
        exit(1);
    }
    
    SIROVINA s[MAX_SIZE];
    int n;
    unsigned kg = atoi(argv[3]);
    
    // TODO: Implementirati funkciju safe_fopen
    //       Deklarisati pokazivace na ulaznu i izlaznu datoteku
    //       Koristiti te pokazivace umesto stdin i stdout
    
    ucitaj_sirovine(stdin, s, &n);
    ispisi_sirovine(stdout, s, n, kg);

/*    
    // test da vidimo da li smo dobro ucitali podatke

    int i;

    for(i = 0;i < n;i++)
    {
        printf("%s %u %lf %lf\n", 
                s[i].naziv_sirovine, 
                s[i].limit_za_velikoprodaju, 
                s[i].maloprodajna_cena, 
                s[i].velikoprodajna_cena);
    }
*/

    return 0;
}

void ucitaj_sirovine(FILE *ulazna, SIROVINA *s, int *pn)
{
    int i = 0;
    
    while(fscanf(ulazna, "%s%u%lf%lf", 
            s[i].naziv_sirovine, 
            &s[i].limit_za_velikoprodaju, 
            &s[i].maloprodajna_cena, 
            &s[i].velikoprodajna_cena) != EOF)
    {
        i++;
    }

    *pn = i;
}

void ispisi_sirovine(FILE *izlazna, SIROVINA *s, int n, unsigned kg)
{
    int i;
    double kolicina_sirovine;
    
    for(i = 0;i < n;i++)
    {
        if(strcmp(s[i].naziv_sirovine, "brasno") == 0)
        {
            kolicina_sirovine = 0.6;
        }
        else if(strcmp(s[i].naziv_sirovine, "sir") == 0)
        {
            kolicina_sirovine = 0.4;
        }
        else if(strcmp(s[i].naziv_sirovine, "ulje") == 0)
        {
            kolicina_sirovine = 0.1;
        }
        else if(strcmp(s[i].naziv_sirovine, "so") == 0)
        {
            kolicina_sirovine = 0.02;
        }
        else
        {
            kolicina_sirovine = 0;      // za slucaj da se nadje neki sastojak koji ne ide u pitu sa sirom
        }
        
        double kg_sirovine = kg * kolicina_sirovine;
        
        double ukupna_cena;
        if(kg_sirovine >= s[i].limit_za_velikoprodaju)
        {
            ukupna_cena = kg_sirovine * s[i].velikoprodajna_cena;
        }
        else
        {
            ukupna_cena = kg_sirovine * s[i].maloprodajna_cena;
        }
        
        fprintf(izlazna, "%6s %5.2lf %8.2lf\n", 
                s[i].naziv_sirovine, kg_sirovine, ukupna_cena);
    }
}


