import java.awt.Color;
import java.awt.event.MouseEvent;
import sk.upjs.jpaz2.ImageTurtleShape;
import sk.upjs.jpaz2.Turtle;
import sk.upjs.jpaz2.WinPane;
public class Farma extends WinPane {
        /**
         * Instancna premenna refercujuca pole (polovy objekt) int-ov. I-ty prvok
         * pola uchovava informaciu o tom, kolko kvetin mame vysadenych v i-tom
         * zahone.
         */
        private int[] zahony;
        /**
         * Nakresli deliace hranice pre zahony
         * 
         * @param pocetZahonov
         *            pocet zahonov, pre ktore kreslime hranicu
         */
        public void kresliZahony(int pocetZahonov) {
                // Korytnacka kreslic
                Turtle kreslic = new Turtle();
                this.add(kreslic);
                // Nakreslime vertikalne ciary
                int sirkaZahonu = this.getWidth() / pocetZahonov;
                for (int i = 0; i < pocetZahonov - 1; i++) {
                        kreslic.setPosition((i + 1) * sirkaZahonu, 0);
                        kreslic.moveTo((i + 1) * sirkaZahonu, this.getHeight());
                }
                // Kreslica odstranime z farmy (kresliacej plochy)
                this.remove(kreslic);
        }
        /**
         * Zasadi kvietok na zadane suradnice
         * 
         * @param x
         *            x-ova suradnica pre sadeny kvietok
         * @param y
         *            y-ova suradnica pre sadeny kvietok
         */
        public void zasadKvietok(int x, int y) {
                // Kreslic ...
                Turtle kreslic = new Turtle();
                // Zmenime tvar korynacky podla obrazku v grafickom subore
           //     kreslic.setShape(new ImageTurtleShape("kvietok.png"));
                // Kreslica pridame do plochy a nechame ho otlacit svoj tvar do
                // kresliacej plochy
                this.add(kreslic);
                kreslic.setPosition(x, y);
                kreslic.stamp();
                // No a nakoniec kreslica odstranime z farmy
                this.remove(kreslic);
                // Vypocitame si sirku jedneho zahonu
                int sirkaZahonu = this.getWidth() / this.pocetZahonov();
                // Vypocitame si index zahonu, do ktoreho sme klikli
                int kliknutyZahon = x / sirkaZahonu;
                // V poli si poznacime, ze v danom zahone sme posadili novy kvietok
                this.zahony[kliknutyZahon]++;
        }
        /**
         * Vrati pocet zahonov
         */
        public int pocetZahonov() {
                return this.zahony.length;
        }
        /**
         * Vrati pocet kvietkov v zadanom zahone
         * 
         * @param indexZahonu
         *            index zahonu na farme
         */
        public int vZahone(int indexZahonu) {
                return this.zahony[indexZahonu];
        }
        /**
         * Vrati pocet zahonov, kde je viac ako hranica kvetiniek
         */
        public int sViacAko(int hranica) {
                int pocitadlo = 0;
                // Prechadzame vsetky zahony
                for (int i = 0; i < this.zahony.length; i++) {
                        // Ak ma i-ty zahon viac ako hranica kvetiniek, tak zvysime
                        // pocitadlo o 1
                        if (this.zahony[i] > hranica) {
                                pocitadlo++;
                        }
                }
                return pocitadlo;
        }
        /**
         * Overime, ci v kazdom zahone je aspon jeden kvietok
         */
        public boolean vsadeNieco() {
                // Prechadzame vsetky zahony
                for (int i = 0; i < this.zahony.length; i++) {
                        // Ak v i-tom zahone niet kvetiniek, tak koncime s false
                        if (this.zahony[i] == 0) {
                                return false;
                        }
                }
                // Ak sme sa dostali sem, tak v kazdom zahone musel byt aspon jeden
                // kvietok
                return true;
        }
        /**
         * Vrati index zahonu, v ktorom je najvacsi pocet kvetiniek
         */
        public int najZahon() {
                // Index zahonu, ktory je kandidatom na najkvietkovanejsi zahon
                int najIndex = 0;
                // Prechadzame vsetky zahony
                for (int i = 1; i < this.zahony.length; i++) {
                        // Ak v i-tom zahone je viac kvetin, ako ma kandidat, tak mame
                        // lepsieho kandidata
                        if (this.zahony[i] > this.zahony[najIndex]) {
                                najIndex = i;
                        }
                }
                return najIndex;
        }
        @Override
        protected void onMouseClicked(int x, int y, MouseEvent detail) {
                this.zasadKvietok(x, y);
        }
        /**
         * "Inicializacna metoda", ktora zabezpeci vykonanie prikazov hned po
         * vytvoreni objektu triedy Farma
         */
        public Farma() {
                // Zmenime rozmery kresliacej plochy
                this.resize(500, 300);
                // Nastavime farbu pozadia
                this.setBackgroundColor(new Color(255, 211, 155));
                // Vytvorime pole s poctom prvkom 7 (dokaze uchovat 7 int-ov).
                // Referenciu na vytvorene pole ulozime do instancnej premennej zahony
                this.zahony = new int[7];
                // Nechame nakreslit hranice zahonov podla velkosti pola
                this.kresliZahony(this.zahony.length);
        }
                public int pocetKvetin(int odZahonuIdx, int poZahonIdx){
                        int pocitadlo = 0;
                        for (int i = odZahonuIdx; i < poZahonIdx+1; i++) {
                                                pocitadlo = pocitadlo +  this.vZahone(i);
                                        }
                        return pocitadlo;
                }
}