package číslo_slovy;

/*******************************************************************************
 * Třída Slovy slouží k ...
 *
 * @author    Petr Marek
 * @version   0.1,  1.4.2003
 */
public class PetrSlovy
{
//== SOUKROMÉ KONSTANTY ========================================================
//== VEŘEJNÉ KONSTANTY =========================================================
//== ŘETĚZCOVÉ LITERÁLY ========================================================
//== ATRIBUTY TŘÍDY ============================================================
    
    private static int len;
    private static String stovky;
    private static String desítky;
    private static String jednotky;
    
    public static String stringČíslo2;
    public static String stringČíslo;
    public static String stovek;
    public static String desítek;
    public static String jednotek;
    public static String slovy;
    
    public static String[] sta = new String[] {
        "",    "sto", "dvě stě",  "tři sta", "čtyři sta",
        "pět set", "šest set",  "sedm set", "osm set", "devět set" };

    public static String[] náctky = new String[] {
        "deset",    "jedenáct", "dvanáct",  "třináct", "čtrnáct",
        "patnáct", "šestnáct",  "sedmnáct", "osmnáct", "devatenáct" };
        
    public static String[] deset = new String[] {
        "",    "deset", "dvacet",  "třicet", "čtyřicet",
        "padesát", "šedesát",  "sedmdesát", "osmdesát", "devadesát" };

    public static String[] jednotka = new String[] {
        "",    "jedna", "dva",  "tři", "čtyři",
        "pět", "šest",  "sedm", "osm", "devět" };
       
    
    
//== ATRIBUTY INSTANCÍ =========================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ TŘÍDY ========================================
//== OSTATNÍ METODY TŘÍDY ======================================================

//##############################################################################
//== KONSTRUKTORY A TOVÁRNÍ METODY =============================================

    /***************************************************************************
     * Bezparametrický konstruktor ...
     */
        private PetrSlovy()
    {
    }


//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ INSTANCÍ =====================================
//== PŘEKRYTÉ METODY IMPLEMENTOVANÝCH ROZHRANÍ =================================
//== PŘEKRYTÉ ABSTRAKTNÍ METODY RODIČOVSKÉ TŘÍDY ===============================
//== PŘEKRYTÉ KONKRÉTNÍ METODY RODIČOVSKÉ TŘÍDY ================================

//== NOVĚ ZAVEDENÉ METODY INSTANCÍ =============================================
    public static String řekni(int číslo)
    {
        stringČíslo2 = Integer.toString(číslo);
        stringČíslo = " ";
        len = stringČíslo2.length();
        for(int g=len-1;g>=0;g--)
        {
            stringČíslo=stringČíslo+(stringČíslo2.charAt(g));
        }
        slovy="";
        for(int i=len;i>0;i--)
        {
            if(i==4 || i==7)
            {
                názvy(stringČíslo.charAt(i)-48, 1);
            }
            if(i==3 || i==6)
            {
                názvy(stringČíslo.charAt(i)-48, 3);
            }
           if(i==1)
            {
                názvy(stringČíslo.charAt(i)-48, 4);
            }
            if(i==2 || i==5)
            {
                if(stringČíslo.charAt(i)-48 > 1)
                    desítky(stringČíslo.charAt(i)-48);
                else if(stringČíslo.charAt(i)-48==1)
                {
                    náctky(stringČíslo.charAt(i-1)-48);
                    i=i-1;
                }
            }
             if(i==4)
            {
                tisíce(stringČíslo.charAt(i)-48);
            }
            if(i==7)
            {
                milióny(stringČíslo.charAt(i)-48);
            }
            if(i==3 || i==6)
            {
                stovky(stringČíslo.charAt(i)-48);
            }
        }
/*        if(číslo!=0)
 *       {
 *       jednotek = jednotky(stringČíslo);
 *       }   
 *       if(len>1)
*        {
            desítek = desítky(stringČíslo);  
 *       }
        if(len==2)
        {
  *          stovek = stovky(stringČíslo);
        }
  *     slovy = stovek + " " + desítek + " " + jednotek;
  */      
        return slovy;
        }
//== SOUKROMÉ A POMOCNÉ METODY TŘÍDY ===========================================
//== SOUKROMÉ A POMOCNÉ METODY INSTANCÍ ========================================
    private static void názvy( int číslo, int mod )
    {
        hlavni:switch(číslo)
        {
            case 1:
                switch(mod)
                {
                    case 1:slovy=slovy+" jeden";break hlavni;                  
                    case 2:slovy=slovy+" jedna";break hlavni;                        
                    case 3:slovy=slovy+" jedno";break hlavni;
                    case 4:slovy=slovy+" jedna";break hlavni;
                }
            case 2:
                switch(mod)
                {
                    case 1:slovy=slovy+" dva";break hlavni;                  
                    case 2:slovy=slovy+" dvě";break hlavni;                        
                    case 3:slovy=slovy+" dvě";break hlavni;
                    case 4:slovy=slovy+" dva";break hlavni;
                }
            case 3:slovy=slovy+" tři";break;
            case 4:slovy=slovy+" čtyři";break;
            case 5:slovy=slovy+" pět";break;
            case 6:slovy=slovy+" šest";break;
            case 7:slovy=slovy+" sedm";break;
            case 8:slovy=slovy+" osm";break;
            case 9:slovy=slovy+" devět";break;
        }
    }
    private static String tisíce( int číslo )
    {
        switch(číslo)
        {
            case 0:
            case 1:slovy=slovy+" tisíc";break;
            case 2:
            case 3:
            case 4:slovy=slovy+" tisíce";break;
            case 5:
            case 6:
            case 7:
            case 8:
            case 9:slovy=slovy+" tisíc";break;
        }
        return slovy;
    }
    private static String stovky( int číslo )
    {
        switch(číslo)
        {
            case 1:slovy=slovy+" sto";break;
            case 2:slovy=slovy+" stě";break;
            case 3:
            case 4:slovy=slovy+" sta";break;
            case 5:
            case 6:
            case 7:
            case 8:
            case 9:slovy=slovy+" set";break;
        }
        return slovy;
    }
    
    private static String desítky( int číslo )
    {
        switch(číslo)
        {
            case 2:slovy=slovy+" dvacet";break;
            case 3:slovy=slovy+" třicet";break;
            case 4:slovy=slovy+" čtyřicet";break;
            case 5:slovy=slovy+" padesát";break;
            case 6:slovy=slovy+" šedesát";break;
            case 7:slovy=slovy+" sedmdesát";break;
            case 8:slovy=slovy+" osmdesát";break;
            case 9:slovy=slovy+" devadesát";break;
        }
        return slovy;
    }

    private static String náctky( int číslo )
    {
        switch(číslo)
        {
            case 1:slovy=slovy+" jedenáct";break;
            case 2:slovy=slovy+" dvanáct";break;
            case 3:slovy=slovy+" třináct";break;
            case 4:slovy=slovy+" čtrnáct";break;
            case 5:slovy=slovy+" patnáct";break;
            case 6:slovy=slovy+" šestnáct";break;
            case 7:slovy=slovy+" sedmnáct";break;
            case 8:slovy=slovy+" osmnáct";break;
            case 9:slovy=slovy+" devatenáct";break;
        }
        return slovy;
    }
    
    private static String milióny( int číslo )
    {
        switch(číslo)
        {
            case 1:slovy=slovy+" milión";break;
            case 2:
            case 3:
            case 4:slovy=slovy+" milióny";break;
            case 5:
            case 6:
            case 7:
            case 8:
            case 9:slovy=slovy+" miliónů";break;
        }
        return slovy;
    }

    private static String desítky(String číslo)
    {
        desítky = deset[stringČíslo.charAt(1)-48];
        return desítky;
    }
    
    
    private static String jednotky(String číslo)
    {
        jednotky = jednotka[stringČíslo.charAt(2)-48];
        return jednotky;
    }
//== VNOŘENÉ A VNITŘNÍ TŘÍDY ===================================================
//== TESTY A METODA MAIN =======================================================
}

