import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Random;

public class FormArtillery extends JDialog {
    private JPanel artilleryPane;
    private JLabel speedLabel;
    private JLabel weightLabel;
    private JLabel colorLabel;
    private JPanel pictureBox;
    private JButton createButton;
    private JButton buttonUp;
    private JButton buttonDown;
    private JButton buttonLeft;
    private JButton buttonRight;
    private JButton createAdvancedButton;
    public JButton buttonSelect;

    private DrawingArtillery _artillery;
    private DrawingArtillery selectedArtillery;

    public FormArtillery() {
        this.setTitle("Artillery");
        this.setContentPane(artilleryPane);
        createButton.addActionListener(e -> {
            Random rnd = new Random();
            Color color = JColorChooser.showDialog(this, "Цвет", new Color(rnd.nextInt(0, 256), rnd.nextInt(0, 256), rnd.nextInt(0, 256)));
            if (color == null) {
                color = new Color(rnd.nextInt(0, 256), rnd.nextInt(0, 256), rnd.nextInt(0, 256));
            }
            _artillery = new DrawingArtillery(rnd.nextInt(100, 300), rnd.nextInt(1000, 2000), color, rnd.nextInt(4, 7));
            _artillery.setPosition(10 + rnd.nextInt(90), 10 + rnd.nextInt(90), pictureBox.getWidth(), pictureBox.getHeight());
            speedLabel.setText(String.format("Скорость: %s", _artillery.getArtillery().getSpeed()));
            weightLabel.setText(String.format("Вес: %s", _artillery.getArtillery().getWeight()));
            colorLabel.setText(String.format("Цвет: %x", _artillery.getArtillery().getBodyColor().getRGB()));
            repaint();
        });
        pictureBox.addComponentListener(new ComponentAdapter() {
            @Override
            public void componentResized(ComponentEvent e) {
                if (_artillery != null) _artillery.changeBorders(pictureBox.getWidth(), pictureBox.getHeight());
                repaint();
            }
        });
        buttonLeft.addActionListener(e -> {
            if (_artillery != null) _artillery.moveTransport(Direction.Left);
            repaint();
        });
        buttonRight.addActionListener(e -> {
            if (_artillery != null) _artillery.moveTransport(Direction.Right);
            repaint();
        });
        buttonUp.addActionListener(e -> {
            if (_artillery != null) _artillery.moveTransport(Direction.Up);
            repaint();
        });
        buttonDown.addActionListener(e -> {
            if (_artillery != null) _artillery.moveTransport(Direction.Down);
            repaint();
        });
        createAdvancedButton.addActionListener(e -> {
            Random rnd = new Random();
            Color color = JColorChooser.showDialog(this, "Основной цвет", Color.white);
            if (color == null) {
                color = new Color(rnd.nextInt(0, 256), rnd.nextInt(0, 256), rnd.nextInt(0, 256));
            }
            Color dopColor = JColorChooser.showDialog(this, "Дополнительный цвет", Color.white);
            if (dopColor == null) {
                dopColor = new Color(rnd.nextInt(0, 256), rnd.nextInt(0, 256), rnd.nextInt(0, 256));
            }
            _artillery = new DrawingAdvancedArtillery(
                    rnd.nextInt(100, 300),
                    rnd.nextInt(1000, 2000),
                    color,
                    rnd.nextInt(4, 7),
                    dopColor,
                    rnd.nextBoolean(),
                    rnd.nextBoolean()
            );
            _artillery.setPosition(10 + rnd.nextInt(90), 10 + rnd.nextInt(90), pictureBox.getWidth(), pictureBox.getHeight());
            speedLabel.setText(String.format("Скорость: %s", _artillery.getArtillery().getSpeed()));
            weightLabel.setText(String.format("Вес: %s", _artillery.getArtillery().getWeight()));
            colorLabel.setText(String.format("Цвет: %x", _artillery.getArtillery().getBodyColor().getRGB()));
            repaint();
        });
        buttonSelect.addActionListener(e -> {
            selectedArtillery = _artillery;
            dispose();
        });
    }

    public DrawingArtillery getSelectedArtillery() {
        return selectedArtillery;
    }

    @Override
    public void paint(Graphics g) {
        super.paint(g);
        Graphics2D g2d = (Graphics2D) pictureBox.getGraphics();
        if (_artillery != null) {
            _artillery.drawTransport(g2d);
        }
    }
}