/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package cz.vutbr.feec.utko.fojtoval.krypto.sifry;

import cz.vutbr.feec.utko.fojtoval.krypto.funkce.Constant;

/**
 * Sifrovani pomoci jednoducheho posunu.
 * @author fojtoval
 */
public class JednoduchyPosun extends Substituce {

    private char[] abecedasifr = null;
    private char[] abecedalus = null;

    /**
     * Sifrovani jednoduchym posunem.
     * @param zdroj otevreny text
     * @return zasifrovany text
     */
    @Override
    public String sifruj(String zdroj) {
        return Utils.zmenaTextuSubs (zdroj, this.abecedasifr, true);
    }

    /**
     * Desifrovani jednoducheho posunu.
     * @param zdroj zasifrovany text
     * @return otevreny text
     */
    @Override
    public String lusti(String zdroj) {
        return Utils.zmenaTextuSubs (zdroj, this.abecedalus, true);
    }

    /**
     * Nastaveni a kontrola parametru sifry.
     * @param parametr
     */
    @Override
    public void setParametr(Object parametr) {

        if ((parametr == null) || !(parametr instanceof Integer)) {
            throw (new IllegalArgumentException ("Parametr neni Integer! (" + parametr + ")"));
        }

        Integer posun = (Integer)parametr;

        if (posun < 0 || posun > Constant.abcd.length) {
            throw (new IllegalArgumentException ("Maximalni posun je " + Constant.abcd.length + ", " + "minimalni posun je 0 (zadano: " + posun + ")"));
        }

        this.abecedasifr = Utils.posunAbecedu (Constant.abcd, posun);
        this.abecedalus = Utils.posunAbecedu (Constant.abcd, (26 - posun));

    }

    /**
     * Prevod desifrovaci abecedy na String.
     * @return nova abeceda
     */
    @Override
    public String abecedaLusToString() {
        return String.valueOf (this.abecedalus);
    }

   /**
    * Prevod sifrovaci abecedy na String.
    * @return nova abeceda
    */
   @Override
    public String abecedaSifToString() {
        return String.valueOf (this.abecedasifr);
    }

    
}
