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

public class Ball : MonoBehaviour
{   
    [SerializeField]
    private GameObject Arrow;
    [SerializeField]
    private Camera chaseCamera;
    private GameObject ArrowInstance;
    private Vector3 StartMousePosition;
    private bool isDragging;
    private float shootForce = 0;
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        //Debug.Log(Input.mousePosition);
        //Debug.Log(shootForce);
        if(Input.GetMouseButtonUp(0)){
            Destroy(ArrowInstance);
            ArrowInstance = null;
            StartMousePosition = Vector3.zero;
            isDragging = false;
            Debug.Log("OnMouseUp");
            this.GetComponent<Rigidbody>().AddRelativeForce(new Vector3(0,0,shootForce)*50,ForceMode.Impulse);
            shootForce = 0;
        }
        if(Input.GetMouseButton(0)&&isDragging){
            float xDiff = MathF.Abs(Input.mousePosition.x - StartMousePosition.x);
            float yDiff = MathF.Abs(Input.mousePosition.y - StartMousePosition.y);
            float angle = MathF.Atan2(xDiff,yDiff)* Mathf.Rad2Deg;


            if(Input.mousePosition.x > StartMousePosition.x){
                angle = -angle;
            }
            

            
            //距離を計算
            float distance = MathF.Sqrt(MathF.Pow(xDiff,2)+MathF.Pow(yDiff,2));

            ArrowInstance.transform.localScale = new Vector3(1,1,MathF.Min(distance*0.05f,1f));

            //打ち出す力を計算
            shootForce = MathF.Min(distance*0.05f,1f);

            //打ち出す力に応じてマテリアルカラーを変更
            int colorStart = 50;
            float arrowColor = (colorStart-colorStart* shootForce)/360;
            //Debug.Log("ArrowColor:"+arrowColor);
            
            Material AllowMaterial = ArrowInstance.GetComponent<Renderer>().material;
            AllowMaterial.color = Color.HSVToRGB(arrowColor,1,1);


            

            //ArrowInstance.transform.rotation = Quaternion.Euler(0,angle*0.1f,0);
            this.transform.rotation = Quaternion.Euler(0,angle,0);
            ArrowInstance.transform.rotation = Quaternion.Euler(0,angle,0);
            //this.transform.rotation.
            //Debug.Log(Input.mousePosition.x - StartMousePosition.x);
            //Debug.Log("angle"+angle*0.01f);
            //Debug.Log("distance"+distance);
            //sMathF.Max()
        }
        //ボールが静止している場合
        if(this.GetComponent<Rigidbody>().velocity.magnitude < 0.1f){
            //カメラの位置をボールの位置に合わせる
            //chaseCamera.transform.position = new Vector3(this.transform.position.x,this.transform.position.y+3,this.transform.position.z-5);
            //カメラの向きをボールの方向に向ける
            //chaseCamera.transform.LookAt(this.transform);
        }
        
        // カメラの位置をボールの位置に徐々に合わせる
            Vector3 targetPosition = new Vector3(this.transform.position.x, this.transform.position.y + 2, this.transform.position.z - 5);
            chaseCamera.transform.position = Vector3.Lerp(chaseCamera.transform.position, targetPosition, Time.deltaTime * 2);

            // カメラの向きをボールの方向に徐々に向ける
            Quaternion targetRotation = Quaternion.LookRotation(this.transform.position - chaseCamera.transform.position);
            chaseCamera.transform.rotation = Quaternion.Slerp(chaseCamera.transform.rotation, targetRotation, Time.deltaTime * 2);
    }
    public void OnDrag(){
        if(StartMousePosition == Vector3.zero)
            StartMousePosition = Input.mousePosition;
        if(ArrowInstance == null){
            float rotationXDiff = -this.gameObject.transform.rotation.eulerAngles.x;
            float rotationYDiff = -this.gameObject.transform.rotation.eulerAngles.y;
            float rotationZDiff = -this.gameObject.transform.rotation.eulerAngles.z;
            ArrowInstance = Instantiate(Arrow, transform.position, Quaternion.identity);
            Debug.Log(rotationXDiff);
        }
        isDragging = true;
    }

    
}
