function [y,Bcasc,Acasc] = IIRsketch(x)
%[y,Bcasc,Acasc] = IIRSKETCH(x)
%IIRSKETCH umožňuje navrhnúť vlastný filter umiestňovaním pólov a núl do
%komplexnej roviny. Skript komunikuje s uživateľom pomocou dialógových
%okien a slúži k pochopeniu vlastností lineárnych digitálnych filtrov
% Vstupy:   x - vstupný signál filtru, môže byť viac vo forme matice, kdeb
%           jednotlivé signály odpovedajú riadkom
% Výstupy:  y - výstupný signál filtru
%           Bcasc - sekcie čitateľa prenosu
%           Acasc - sekcie menovateľa prenosu
%POZOR!!! Nezatvárať okno s fázovým prenosom

assert(isnumeric(x)==1,'Vstupný signál musí pozostávať z číselných hodnôt');

Bcasc = []; %nuly
Acasc = []; %póly
next = 1;
while next
   answer = questdlg('Čo chceš pridať ďalej? Ak nič, zavri okno krížikom.', ...
        'Tvorba filtru', ...
        'Pridať nulu','Pridať pól','Koniec','Koniec');

   switch answer

       case 'Pridať nulu'
            prompt = {'Absolútna hodnota:','Fázový uhol:','Násobná koštanta'};
            title = 'Pridanie nuly';
            dims = [1 35];
            nuldata = inputdlg(prompt,title,dims);

            try
            ro = str2num(char(nuldata(1)));
            ro = abs(ro);
            theta = str2num(char(nuldata(2)));
            b0 = str2num(char(nuldata(3)));
            catch
               error('Zle zadané vstupy');
            end

            if b0 == []
                b0 = 1;
            end

            if rem(theta,pi) == 0 %sme na reálnej osi, nemusíme automaticky
%komplexne združovať, preto sa pýtame uživateľa
                singlezero = questdlg('Chceš nulu komplexne združiť?', ...
                    'Tvorba filtru', ...
                    'Áno','Nie','Nie');
                switch singlezero
                    case 'Áno'
                        Bnew = getcoefspol(ro,theta,b0);
                        Bcasc(end+1,:) = Bnew;
                    otherwise
                        rel = ro*cos(theta);
                        Bcasc(end+1,:) = b0*[0 1 -rel];
                end   
            else
                Bnew = getcoefspol(ro,theta,b0);
                Bcasc(end+1,:) = Bnew;
            end

            Acasc(end+1,:) = [0 0 1];

       case 'Pridať pól'

            prompt = {'Absolútna hodnota:','Fázový uhol:'};
            title = 'Pridanie polu';
            dims = [1 35];
            poldata = inputdlg(prompt,title,dims);

            try
            ro = str2num(char(poldata(1)));
            ro = abs(ro);
            theta = str2num(char(poldata(2)));
            catch
                error('Zle zadané vstupy');
            end
            if ro >= 1
               uiwait(msgbox({'Pól musí ležať vo vnútri jednotkovej kružnice';'Voľ absolútnu hodnotu < 1'},'Nestabilita filtru','modal')); 
            else
               if rem(theta,pi) == 0 %sme na reálnej osi, nemusíme automaticky
%komplexne združovať, preto sa pýtame uživateľa
                singlezero = questdlg('Chceš pól komplexne združiť?', ...
                    'Tvorba filtru', ...
                    'Áno','Nie','Nie');
                switch singlezero
                    case 'Áno'
                        Anew = getcoefspol(ro,theta,b0);
                        Acasc(end+1,:) = Anew;
                    otherwise
                        rel = ro*cos(theta);
                        Acasc(end+1,:) = [0 1 -rel];
                end   
                else
                    Anew = getcoefspol(ro,theta);
                    Acasc(end+1,:) = Anew;
                end
                Bcasc(end+1,:) = [0 0 1];
            end



       case 'Koniec'
           next = 0;
           normal = questdlg('Chceš filter normalizovať?', ...
                    'Normalizácia', ...
                    'Áno','Nie','Nie');
           switch normal
             case 'Áno'
                 [Bcasc,Acasc] = normalize(Bcasc,Acasc);
             otherwise

           end 
   end

   close all;
   polezeroplot(Bcasc,Acasc);
   bodeplotdb(Bcasc,Acasc);
   waitfor(gcf,'CurrentCharacter');
   curChar=uint8(get(gcf,'CurrentCharacter'));

    %tu program zastaví a čaká na sltačenie klávese. Treba mať pritom
    %aktívne otvorený figure s fázovým prenosom -> POZOR!!! Nezatvárať
    %okno s fázovým prenosom, inak sa nemôže navrhovať ďalej

end

close all

%% FILTER

y = IIRzerophase(x,Bcasc,Acasc);

end

