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

#define MAX_SEFOVI 20
#define MAX_SIFRA 6
#define MAX_ZAUZETOST 9

struct sef_st {
    char sifra[MAX_SIFRA];
    char zauzetost[MAX_ZAUZETOST];
    int cena_zakupa;
    double tezina_robe;
};

FILE *safe_fopen(char *, char *, int);
void ucitaj_sefove(FILE *, struct sef_st *, int *);
void ispisi_oporezovane(FILE *, struct sef_st *, int);

int main(int argc, char **argv) {
    struct sef_st sefovi[MAX_SEFOVI];
    int n;

    if(argc != 3) {
        printf("Primer poziva programa: %s sefovi.txt oporezovani.txt\n", argv[0]);
        exit(1);
    }

    FILE *ulazna = safe_fopen(argv[1], "r", 6);
    ucitaj_sefove(ulazna, sefovi, &n);
    fclose(ulazna);

    FILE *izlazna = safe_fopen(argv[2], "w", 7);
    ispisi_oporezovane(izlazna, sefovi, n);
    fclose(izlazna);


    return 0;
}

FILE *safe_fopen(char *ime, char *rezim, int kod_greske) {
    FILE *fp = fopen(ime, rezim);

    if(fp == NULL) {
        printf("Greska prilikom otvaranja datoteke sa imenom %s\n", ime);
        exit(kod_greske);
    }

    return fp;
}

void ucitaj_sefove(FILE *pulazna, struct sef_st *sefovi, int *pn) {
    int i = 0;

    while(fscanf(pulazna, "%s %s %d %lf", 
                 sefovi[i].sifra,                   // moze i *pn umesto "i"
                 sefovi[i].zauzetost,
                 &sefovi[i].cena_zakupa,
                 &sefovi[i].tezina_robe) != EOF) {
        i++;    // (*pn)++;
    }
    // metoda za pronalazenje seg fault-a    
    // puts("test!");

    *pn = i;
}

void ispisi_oporezovane(FILE *pizlazna, struct sef_st *sefovi, int n) {
    int i;

    for(i = 0;i < n;i++) {
        fprintf(pizlazna, "%s %s %d %lf\n", sefovi[i].sifra, sefovi[i].zauzetost, sefovi[i].cena_zakupa, sefovi[i].tezina_robe);
    }
}










