package hello;

import javax.microedition.lcdui.Graphics;
import java.util.Random;

public class BadGuy {

    private mySprite[] BadGuys;
    private mySprite[] invisiSprites;
    private int NUMBEROFBADGUYS;
    private Random gen;
    private int counter = 0;
    private int direction;

    public BadGuy(int noOfBadGuys)
    {
        gen = new Random();
        setNoOfBadGuys(noOfBadGuys);
        BadGuys = new mySprite[getNoOfBadGuys()];
        for (int i = 0; i < getNoOfBadGuys(); i++)
        {
            BadGuys[i] = new mySprite("BadGuy.png", 23, 43);
            BadGuys[i].setLocation(160.0, 75.0);
            BadGuys[i].setRefPix(12, 43);

            direction = gen.nextInt(2);

            if (direction == 1)
            {
                BadGuys[i].setVelx(0.00026);
            } 
            else
            {
                BadGuys[i].setVelx(-0.00026);
            }
        }
    }

    public void getTurningPoints(Canvas canv)
    {
        invisiSprites = new mySprite[canv.getBackground().numberOfTiles(3, 4, 5, 8, 9, 10, 11, 12, 13) + 1];
        for (int i = 0; i < canv.getBackground().getMapLength() - 1; i++)
        {
            if (counter <= canv.getBackground().numberOfTiles(3, 4, 5, 8, 9, 10, 11, 12, 13) + 1)
            {
                if (canv.getBackground().checkMap(3, 4, 5, 8, 9, 10, 11, 12, 13, i) == true)
                {
                    invisiSprites[counter] = new mySprite("Invisi.PNG", 4, 4);
                    invisiSprites[counter].setRefPix(2, 2);
                    invisiSprites[counter].setActive();
                    invisiSprites[counter].setLocation(canv.getBackground().getTileX(), canv.getBackground().getTileY());
                    counter++;
                }
            }
        }
    }

    public void moveTurningPoint(boolean x, boolean y, int value)
    {
        if(x)
        {
            for(int i = 0; i < invisiSprites.length; i++)
            {
                if(invisiSprites[i] != null)
                    invisiSprites[i].move(value, 0);
            }
        }
        else if(y)
        {
            for(int i = 0; i < invisiSprites.length; i++)
            {
                if(invisiSprites[i] != null)
                    invisiSprites[i].move(0, value);
            }
        }

    }

    public void update(Canvas canv)
    {
        if (BadGuys != null)
        {
            for (int j = 0; j < getNoOfBadGuys(); j++)
            {
                if (BadGuys[j] != null)
                {
                    BadGuys[j].update(canv);
                    for(int i = 0; i < invisiSprites.length; i++)
                    {
                        if(BadGuys[j].collision(invisiSprites[i], true))
                        {
                            doAI(j);
                        }
                    }
                }
            }
        }
    }

    public mySprite getSprite(int badGuyNumber)
    {
        if (BadGuys[badGuyNumber] != null)
        {
            //System.out.println("You successfully requested " + badGuyNumber);
            return BadGuys[badGuyNumber];
        }
        else
        {
            //System.out.println("You requested " + badGuyNumber + " which is null");
            return null;
        }
    }

    public void setNoOfBadGuys(int number)
    {
        NUMBEROFBADGUYS = number;
    }

    public int getNoOfBadGuys()
    {
        return NUMBEROFBADGUYS;
    }

    public void draw(Graphics g, int no) 
    {

        if(no < getNoOfBadGuys())
        {
            if(BadGuys[no] != null)
                BadGuys[no].draw(g);
        }
        if(no < invisiSprites.length)
        {
            if(invisiSprites[no] != null)
            {
                invisiSprites[no].draw(g);
            }
        }
    }

    public void doAI(int badguyNo)
    {
        switch(direction)
        {
            case 0:
                BadGuys[badguyNo].setVelocity(0.00026, 0);
                break;
            case 1:
                BadGuys[badguyNo].setVelocity(-0.00026, 0);
                break;
            case 2:
                BadGuys[badguyNo].setVelocity(0, 0.00026);
                break;
            case 3:
                BadGuys[badguyNo].setVelocity(0, -0.00026);
                break;
        }
      //  System.out.println(direction);
    }

    public void findPath(int no)
    {
        direction = no;
       // System.out.println(direction);
    }

    public double getDistanceY(GoodGuy character, int no)
    {
        double distanceY = character.getSprite().getPosy() - BadGuys[no].getPosy();

        if(distanceY < 0)
        {
            distanceY = -distanceY;
        }
       // System.out.println(distanceY);
        return distanceY;
    }

    public double getDistanceX(GoodGuy character, int no)
    {
        double distanceX = character.getSprite().getPosx() - BadGuys[no].getPosx();

       // System.out.println(distanceX);
        if(distanceX < 0)
        {
            distanceX = -distanceX;
        }
        System.out.println(distanceX);
        return distanceX;
    }
}
