clear all
close all
clc

%%%%% VYBER FUNKCE PROGRAMU %%%%%

ok = false;
while (ok == false)
    try
        x = input('Pridat noveho dodavatele nebo otevrit jiz pridaneho? (0 - pridat, 1 - otevrit): ', 's');
        volba = eval(x);
        if ((~isnumeric(volba)) || ~((volba == 0) || (volba == 1)))
            disp('Musite zadat cislo 0 nebo 1.');
            ok = false;
        else
            ok = true;
        end

    catch ME
        disp('Musite zadat cislo.');

    end
end
disp('')

% Otevreni jiz pridaneho dodavatele
if volba == 1
    
    ok = false;
    while (ok == false)
        try
            x = input('Zadejte nazev .mat souboru (nesmi obsahovat tecky): ', 's');
            load(x);
            ok = true;
        catch ME
            ok = false;
            disp('Musite zadat platny nazev .mat souboru.');
        end      
    end    
    
    % Sluzby
    F_sluzby = readfis('Sluzby.fis');
    sluzby = evalfis([kalkulace linka servis zelena], F_sluzby);
    % Produkt
    F_produkt = readfis('Produkt.fis');
    produkt = evalfis([barva kvalita], F_produkt);
    % Vysledek
    F_vysledek = readfis('Vysledek.fis');
    vysledek = evalfis([sluzby produkt reference cena], F_vysledek)

    % Vypis vysledku
    if (vysledek < 0.5)
        vysledek_text = 'Neodpovida pozadavkum';
        disp(vysledek_text)
    end
    if vysledek >= 0.5 && vysledek <1.5
        vysledek_text = 'Spise neodpovida pozadavkum';
        disp(vysledek_text)
    end
    if vysledek >= 1.5 && vysledek <2.5
        vysledek_text = 'Spise odpovida pozadavkum';
        disp(vysledek_text)
    end
    if vysledek >= 2.5
        vysledek_text = 'Odpovida pozadavkum';
        disp(vysledek_text)
    end

    
% Pridani noveho dodavatele    
else

    %%%%% VSTUPY %%%%%

    % Nazev dodavatele

    name = input('Zadejte nazev dodavatele: ', 's');

    % Input 1 - Online kalkulace
    ok = false;
    while (ok == false)
        try
            x = input('Je k dispozici on-line kalkulace? (0 - Ne, 1 - Ano): ', 's');
            kalkulace = eval(x);
            if ((~isnumeric(kalkulace)) || ~((kalkulace == 0) || (kalkulace == 1)))
                disp('Musite zadat cislo 0 nebo 1.');
                ok = false;
            else
                ok = true;
            end

        catch ME
            disp('Musite zadat cislo.');

        end
    end
    disp('')

    % Input 2 - Zakaznicka linka
    ok = false;
    while (ok == false)
        try
            x = input('Je k dispozici zakaznicka linka? (0 - Ne, 1 - Ano): ', 's');
            linka = eval(x);
            if ((~isnumeric(linka)) || ~((linka == 0) || (linka == 1)))
                disp('Musite zadat cislo 0 nebo 1.');
                ok = false;
            else
                ok = true;
            end

        catch ME
            disp('Musite zadat cislo.');

        end
    end
    disp('')

    % Input 3 - Servis
    ok = false;
    while (ok == false)
        try
            x = input('Jaky poskytuje firma servis? (0 - Zarucni, 1 - Pozarucni): ', 's');
            servis = eval(x);
            if ((~isnumeric(servis)) || ~((servis == 0) || (servis == 1)))
                disp('Musite zadat cislo 0 nebo 1.');
                ok = false;
            else
                ok = true;
            end

        catch ME
            disp('Musite zadat cislo.');

        end
    end
    disp('')

    % Input 4 - Zelena usporam
    ok = false;
    while (ok == false)
        try
            x = input('Podporuje firma program zelena usporam? (0 - Ne, 1 - Ano, 2 - Ano+): ', 's');
            zelena = eval(x);
            if ((~isnumeric(zelena)) || ~((zelena == 0) || (zelena == 1) || (zelena == 2)))
                disp('Musite zadat cislo 0, 1 nebo 2.');
                ok = false;
            else
                ok = true;
            end

        catch ME
            disp('Musite zadat cislo.');

        end
    end
    disp('')

    % Input 5 - Barevna skala
    ok = false;
    while (ok == false)
        try
            x = input('Jakou sirokou barevnou skalu oken firma nabizi? (0 - Zakladni, 1 - Stredni, 2 - Siroka): ', 's');
            barva = eval(x);
            if ((~isnumeric(barva)) || ~((barva == 0) || (barva == 1) || (barva == 2)))
                disp('Musite zadat cislo 0, 1 nebo 2.');
                ok = false;
            else
                ok = true;
            end

        catch ME
            disp('Musite zadat cislo.');

        end
    end
    disp('')

    % Input 6 - Kvalita
    ok = false;
    while (ok == false)
        try
            x = input('Jaka je kvalita plastovych profilu? (0 - Nizka, 1 - Prumerna, 2 - Vysoka): ', 's');
            kvalita = eval(x);
            if ((~isnumeric(kvalita)) || ~((kvalita == 0) || (kvalita == 1) || (kvalita == 2)))
                disp('Musite zadat cislo 0, 1 nebo 2.');
                ok = false;
            else
                ok = true;
            end

        catch ME
            disp('Musite zadat cislo.');

        end
    end
    disp('')

    % Input 7 - Pocet referenci
    ok = false;
    while (ok == false)
        try
            x = input('Zadejte pocet referenci: ', 's');
            reference = eval(x);
            if (~isnumeric(reference) || (reference  < 0) || (reference  == 1i) || (reference  == 1j))
                disp('Musite zadat cislo v rozmezi 0 az 200.');
                ok = false;
            else
                if (reference > 200)
                    reference = 200;
                end
                ok = true;
            end

        catch ME
            disp('Musite zadat cislo.');
        end
    end
    disp('')

    % Input 8 - Cena
    ok = false;
    while (ok == false)
        try
            x = input('Zadejte celkovou cenu: ', 's');
            cena = eval(x);
            if (~isnumeric(cena) || (cena  < 0) || (cena  == 1i) || (cena  == 1j))
                disp('Musite zadat cislo.');
                ok = false;
            else
                if (cena > 300000)
                    cena = 300000;
                end
                ok = true;
            end

        catch ME
            disp('Musite zadat cislo.');
        end
    end
    disp('')
    disp('')


    %%%%% VYHODNOCENI %%%%%

    % Sluzby
    F_sluzby = readfis('Sluzby.fis');
    sluzby = evalfis([kalkulace linka servis zelena], F_sluzby)

    % Produkt
    F_produkt = readfis('Produkt.fis');
    produkt = evalfis([barva kvalita], F_produkt)

    % Vysledek
    F_vysledek = readfis('Vysledek.fis');
    vysledek = evalfis([sluzby produkt reference cena], F_vysledek)



    % Vypis vysledku

    if (vysledek < 0.5)
        vysledek_text = 'Neodpovida pozadavkum';
        disp(vysledek_text)
    end

    if vysledek >= 0.5 && vysledek <1.5
        vysledek_text = 'Spise neodpovida pozadavkum';
        disp(vysledek_text)
    end

    if vysledek >= 1.5 && vysledek <2.5
        vysledek_text = 'Spise odpovida pozadavkum';
        disp(vysledek_text)
    end

    if vysledek >= 2.5
        vysledek_text = 'Odpovida pozadavkum';
        disp(vysledek_text)
    end


    % Ulozeni do .mat souboru

    save(name, 'name','kalkulace', 'linka', 'servis', 'zelena', 'barva', 'kvalita', 'reference', 'cena', 'vysledek', 'vysledek_text')


    % Ulozeni do .txt souboru

    pripona = '.txt';
    nazev_souboru = strcat(name,pripona);

    fid = fopen(nazev_souboru, 'w');

    fprintf(fid, 'Nazev dodavatele:\t');
    fprintf(fid, name);
    fprintf(fid, '\r\n');
    fprintf(fid, '\r\n');

    fprintf(fid, 'Online kalkulace:\t');
    fprintf(fid, '%d', kalkulace);
    fprintf(fid, '\r\n');

    fprintf(fid, 'Zakaznicka linka:\t');
    fprintf(fid, '%d', linka);
    fprintf(fid, '\r\n');

    fprintf(fid, 'Servis:\t');
    fprintf(fid, '%d', servis);
    fprintf(fid, '\r\n');

    fprintf(fid, 'Zelena usporam:\t');
    fprintf(fid, '%d', zelena);
    fprintf(fid, '\r\n');

    fprintf(fid, 'Barevna skala:\t');
    fprintf(fid, '%d', barva);
    fprintf(fid, '\r\n');

    fprintf(fid, 'Kvalita:\t');
    fprintf(fid, '%d', kvalita);
    fprintf(fid, '\r\n');

    fprintf(fid, 'Pocet referenci:\t');
    fprintf(fid, '%d', reference);
    fprintf(fid, '\r\n');

    fprintf(fid, 'Cena:\t');
    fprintf(fid, '%d', cena);
    fprintf(fid, '\r\n');
    fprintf(fid, '\r\n');

    fprintf(fid, 'Vysledek:\t');
    fprintf(fid, '%1.4f', vysledek);
    fprintf(fid, '\r\n');

    fprintf(fid, vysledek_text);
    fprintf(fid, '\r\n');

    status = fclose(fid);

end
