﻿using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerControl : MonoBehaviour {

    public GameObject projectil;
    private Rigidbody projectilRigidbody;
    public float strengthShoot;

    [Range(0.01f,1)]
    public float rotateSpeedCannonBody;
    [Range(0.01f, 1)]
    public float rotateSpeedCannonHead;

    private Player activePlayer;

    private Player[] players;
    private CameraControl cameraControl;
    private int playerIndex;

    private bool projectilIsReady = true;

    // Use this for initialization
    void Start () {
        players = FindObjectsOfType<Player>();
        cameraControl = Camera.main.GetComponent<CameraControl>();
        projectilRigidbody = projectil.GetComponent<Rigidbody>();
        if (players.Length > 0)
            setPlayer(players[playerIndex]);
	}
	
	// Update is called once per frame
	void Update () {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            shoot();
        }
        rotateCannonBody();
        rotateCannonHead();
    }

    void nextPlayer() {
        playerIndex++;
        setPlayer(players[playerIndex % players.Length]);

    }

    void setPlayer(Player player) {
        activePlayer = player;
        cameraControl.setCameraRotation(activePlayer.cannonBody.transform.position);
    }

    void setCameraTransform(float rotate) {
        Ray ray = new Ray(activePlayer.cannonHead.transform.position, -activePlayer.cannonHead.transform.right);
        Vector3 pos = ray.GetPoint(cameraControl.cameraOffset);
        pos.y += cameraControl.cameraOffset/4;

        ///////
        //Debug.DrawRay(ray.origin, ray.direction * cameraControl.cameraOffset, Color.magenta, 1);
        //Debug.Log(pos);
        ///////

        cameraControl.setCameraPosition(pos);
    }

    public void shoot() {
        if (projectil && projectilIsReady)
        {
            projectil.transform.position = activePlayer.cannonHead.transform.position;
            projectilIsReady = false;
            StartCoroutine(readyProjectil());
            projectil.GetComponent<Rigidbody>().velocity = activePlayer.cannonHead.transform.right * strengthShoot;
        }
    }

    void rotateCannonBody() {
        if (activePlayer.cannonBody) {
            
#if UNITY_ANDROID
            float rotate = 0;
            if (Input.touchCount > 0)
                rotate = Input.GetTouch(0).deltaPosition.x;
#else
            float rotate = Input.GetAxis("Horizontal");
#endif
            activePlayer.cannonBody.transform.Rotate(transform.up, rotate);
            activePlayer.rightWheel.transform.Rotate(-transform.forward, rotate);
            activePlayer.leftWheel.transform.Rotate(transform.forward, rotate);
            setCameraTransform(rotate);
        }
    }

    void rotateCannonHead()
    {
        if (activePlayer.cannonHead) {
#if UNITY_ANDROID
            float rotate = 0;
            if (Input.touchCount > 0)
                rotate = Input.GetTouch(0).deltaPosition.y;
#else
            float rotate = Input.GetAxis("Vertical");
#endif
            activePlayer.cannonHead.transform.Rotate(-Vector3.up, rotate);
            if(activePlayer.cannonHead.transform.localRotation.eulerAngles.x < 55)
                activePlayer.cannonHead.transform.Rotate(Vector3.up, rotate);
        }
    }

    IEnumerator readyProjectil() {
        yield return new WaitForSeconds(4);
        nextPlayer();
        projectilIsReady = true;
    }
}
