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

public class Patient : MonoBehaviour {

		// Patienten Stats
		public float patientenRunningSpeed;
		public float patientenRotationSpeed;

		// Elemente für Distanz zur Spieler_in
		public float distanceFromPlayer;
		public GameObject Player;

		//Patienten haben Angst für der Spieler_in
		public bool fear;

		//Rigidbody für Pushback
		public Rigidbody rb;

		//Elemente für Audio
		public GameObject patientPlane;
		AudioSource patientAudio;


void Start () {
		// Definiert Rigidbody
		rb = gameObject.GetComponent<Rigidbody>();
		// GameManager fügt mehr Patienten hinzu
		GameManager.instance.patienten += 1;
  	GameManager.instance.maxpatienten += 1;
		// Werte der Patienten werden definiert
		patientenRotationSpeed = 15;
		patientenRunningSpeed = 4;
		// Player wird gefunden
		Player = GameObject.Find("Player");

		//AudioSource im zweiten Child Objekt wird gefunden
		patientPlane = this.gameObject.transform.GetChild(1).gameObject;
		patientAudio = patientPlane.GetComponent<AudioSource>();
	}

	void Update () {
		// Distanz zur Spielfigur
		distanceFromPlayer = Vector3.Distance (Player.transform.position, this.gameObject.transform.position);

		// Sobald die Infektions Power größer als 2 ist, dann haben die Zombies Angst
		if (GameManager.instance.infectionPower >= 2)
			{
				fear = true;
			}
			// Sobald die Patienten Angst haben und sie 7 Units? von der Spielfigur entfernt sind, drehen sie sich zur Spielfigur und laufen weg
			if (fear == true && distanceFromPlayer < 7)
			{
				transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(Player.transform.position  - transform.position), patientenRotationSpeed * Time.deltaTime);
				transform.position += transform.forward * (patientenRunningSpeed* -1) * Time.deltaTime;
			}
	}
  void OnCollisionEnter(Collision col) {
  		if (col.gameObject.tag == "Player")
      	{
          // auf GameManager zugreifen, Wert für Beacon verringern & Patientenwerte werden verändert
          GameManager.instance.infectionPower += 1;
					GameManager.instance.patienten -= 1;
          GameManager.instance.patientenkonvertiert += 1;
					// Knockback
					rb.AddForce(-transform.forward * 500);
					// Patienten Sprite wird deaktiviert
					patientPlane.SetActive(false);
          //Zerstört das Script. Patienten werden zu Infizierten
          Destroy (GetComponent<Patient>());
    }
	}
	// Sobald die Patienten in der TriggerZone der Spielfigur sind und Fear aktiviert ist, schreien sie.
	void OnTriggerEnter (Collider col) {
			if (col.gameObject.tag == "Player" && fear == true)
			{patientAudio.Play();}
		}
}
