﻿using UnityEngine;

[ExecuteInEditMode]
public class PickupsSetup : MonoBehaviour {

    [SerializeField]
    Transform[] pickupPrefabs;
    Transform map;
    Transform boussole;
    Transform pieces;
    [SerializeField]
    Vector2 minMaxOnSpline = new Vector2(.2f, .8f);
    float RandomProgress { get{ return Random.Range(minMaxOnSpline.x, minMaxOnSpline.y); } }

    BezierSpline spline;

    Transform pickupsParent;
    string pickupsParentName = "PickupsParent";

    private void Start()
    {
        // Get spline.
        spline = GetComponentInChildren<BezierSpline>();
        if (spline == null)
            return;

        // Create pickupsParent.
        if (transform.Find(pickupsParentName) == null)
        {
            GameObject newPickupsParent = new GameObject(pickupsParentName);
            pickupsParent = newPickupsParent.transform;
            pickupsParent.parent = transform;
        }
        else
            pickupsParent = transform.Find(pickupsParentName);

        // Get pickup types.
        foreach (Transform pickup in pickupPrefabs)
        {
            Pick_Item item = pickup.GetComponentInChildren<Pick_Item>();
            if (item != null)
            {
                switch (item.type)
                {
                    case Pick_Item.pickUpType.map:
                        map = pickup;
                        break;
                    case Pick_Item.pickUpType.boussole:
                        boussole = pickup;
                        break;
                    case Pick_Item.pickUpType.pieces:
                        pieces = pickup;
                        break;
                    default:
                        break;
                }
            }
        }

        // Spawn pickups.
        SpawnPickups();
    }

    public void SpawnPickups()
    {
        DestroyPickups();
        if (pickupPrefabs.Length < 1 || pickupsParent == null)
            return;
        // Spawn map, boussole, pieces.
        SpawnPickupOnSpline(map, RandomProgress);
        SpawnPickupOnSpline(boussole, RandomProgress);
        SpawnPickupOnSpline(pieces, RandomProgress);
    }

    void SpawnPickupOnSpline(Transform tr, float splineProgress)
    {
        // Spawn a transform on our spline.
        Transform newTR = Instantiate(tr, pickupsParent);
        tr.position = spline.GetPoint(splineProgress);
    }

    public void DestroyPickups()
    {
        if (spline == null)
            return;
        // Destroy every child of pickups parent.
        pickupsParent.DestroyChidren();
    }
}
