﻿using System;
using UnityEngine;

namespace Dissonance.Integrations.DarkRift2
{
    public class DarkRift2Player
        : MonoBehaviour, IDissonancePlayer
    {
        private Transform _transform;

        public Vector3 Position
        {
            get { return _transform == null ? Vector3.zero : _transform.position; }
        }

        public Quaternion Rotation
        {
            get { return _transform == null ? Quaternion.identity : _transform.rotation; }
        }

        public string PlayerId { get; private set; }

        public NetworkPlayerType Type { get; private set; }

        public bool IsTracking { get; private set; }

        public DarkRift2Player()
        {
            Type = NetworkPlayerType.Unknown;
            IsTracking = false;
        }

        private void Start ()
        {
            _transform = transform;
        }

        public void SetPlayerId(NetworkPlayerType type, [NotNull] string id)
        {
            if (id == null) throw new ArgumentNullException("id", "Cannot set player ID to null");
            if (type == NetworkPlayerType.Unknown) throw new ArgumentException("Cannot set player type to Unknown", "type");

            Type = type;
            PlayerId = id;

            var comms = FindObjectOfType<DissonanceComms>();
            if (IsTracking)
                comms.StopTracking(this);
            comms.TrackPlayerPosition(this);
            IsTracking = true;
        }
    }
}
