package laba1Loco;

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

public class DrawingLoco extends DrawingTrain{

    /// <summary>
    /// Инициализация свойств
    /// </summary>
    /// <param name="speed">Скорость</param>
    /// <param name="weight">Вес</param>
    /// <param name="bodyColor">Цвет кузова</param>
    /// <param name="additionalColor">Дополнительный цвет</param>
    /// <param name="tube">Признак наличия трубы</param>
    /// <param name="fuelTank">Признак наличия бака</param>
    /// <param name="locoLine">Признак наличия паровозной полосы</param>
    /// <param name="width">Ширина картинки</param>
    /// <param name="height">Высота картинки</param>
    public DrawingLoco(int speed, double weight, Color bodyColor, int _numWheel, Color additionalColor, boolean tube, boolean fuelTank, boolean locoLine, int width, int height)
    {
        super(speed, weight, bodyColor, _numWheel, width, height);
        EntityTrain = new EntityLoco(speed, weight, bodyColor, _numWheel, additionalColor, tube, fuelTank, locoLine);
        _locoWidth = ((EntityLoco)EntityTrain).FuelTank ? 169 : 83;
    }
    // конструктор для 3 сложной лабы
    public DrawingLoco(EntityLoco train, IWheelDrawing _wheelDrawing, int width, int height ){
        super(train, _wheelDrawing, width, height);
        if (height < _locoHeight || width < _locoWidth)
            return;
    }
    /// <summary>
    /// Установка позиции
    /// </summary>
    /// <param name="x">Координата X</param>
    /// <param name="y">Координата Y</param>
    public void SetPosition(int x, int y)
    {
        _startPosX = Math.min(x, _pictureWidth-_locoWidth);
        _startPosY = Math.min(y, _pictureHeight-_locoHeight);
    }
    /// <summary>
    /// Прорисовка объекта
    /// </summary>
    /// <param name="g"></param>
    public void DrawTransport(Graphics2D g2d)
    {

        if (EntityTrain == null)
        {
            return;
        }

        super.DrawTransport(g2d);

        g2d.setColor(((EntityLoco)EntityTrain).AdditionalColor);            
        if (((EntityLoco)EntityTrain).Tube)
        {
            g2d.drawPolyline(new int[] {
_startPosX + 40,_startPosX + 40,_startPosX + 45,_startPosX + 41,_startPosX + 41,_startPosX + 44,_startPosX + 44,_startPosX + 45,_startPosX + 45,
            },new int[] {
_startPosY+9,_startPosY+3,_startPosY+3,_startPosY+3,_startPosY,_startPosY,_startPosY+3,_startPosY+3,_startPosY+9,
            },9);
        }
        if (((EntityLoco)EntityTrain).LocoLine)
        {
            g2d.drawPolyline(new int[] {
                _startPosX + 60,_startPosX + 38,
            },new int[] {
                _startPosY+10,_startPosY+32
            },2);
            g2d.drawPolyline(new int[] {
                _startPosX + 65,_startPosX + 43,
            },new int[] {
                _startPosY+10,_startPosY+32
            },2);
            g2d.drawPolyline(new int[] {
                _startPosX + 70,_startPosX + 48,
            },new int[] {
                _startPosY+10,_startPosY+32
            },2);
        }
        if (((EntityLoco)EntityTrain).FuelTank)
        {
            // body
        g2d.setColor(EntityTrain.BodyColor);
        g2d.drawPolyline(new int[]{
            _startPosX + 89, _startPosX + 164, _startPosX + 164, _startPosX + 89, _startPosX + 89,
        }, new int[]{
            _startPosY+10, _startPosY+10, _startPosY+32, _startPosY+32, _startPosY+10
        }, 5);
        g2d.drawPolyline(new int[]{
            _startPosX + 89, _startPosX + 164,
        }, new int[]{
            _startPosY+21, _startPosY+21,
        }, 2);

        // trucks
        g2d.fillPolygon(new int[]{
_startPosX + 0+85,_startPosX + 5+85,_startPosX + 32+85,_startPosX + 36+85,
        }, new int[]{
_startPosY+37,_startPosY+33,_startPosY+33,_startPosY+37
        }, 4);
        g2d.fillPolygon(new int[]{
_startPosX + 44+85,_startPosX + 49+85,_startPosX + 76+85,_startPosX + 80+85,
        }, new int[]{
_startPosY+37,_startPosY+33,_startPosY+33,_startPosY+37
        }, 4);

        //back
        g2d.fillPolygon(new int[]{
_startPosX + 79+85,_startPosX + 82+85,_startPosX + 82+85,_startPosX + 79+85,
        }, new int[]{
_startPosY+12,_startPosY+12,_startPosY+30,_startPosY+30
        }, 4);

        
        //front
        g2d.fillPolygon(new int[]{
_startPosX + 86,_startPosX + 89,_startPosX + 89,_startPosX + 86,
        }, new int[]{
_startPosY+12,_startPosY+12,_startPosY+30,_startPosY+30
        }, 4);

        }

        //wheels
        wheelDrawing.Draw(_startPosX, _startPosY, ((EntityLoco)EntityTrain).FuelTank, EntityTrain.BodyColor, g2d);
    }
}