// Use this for initialization
	void Start () {
        Debug.Log("Enter Eval Scene");
        //set volume control
        //#if UNITY_ANDROID 		
        //        unity = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        //        currentActivity = unity.GetStatic<AndroidJavaObject>("currentActivity");
        //        currentActivity.Call("ChangeVolumeControl");
        //        Debug.Log("Tried to active volume button control");
        //#endif
        //setup heatmap
        ApplicationChrome.statusBarState = ApplicationChrome.navigationBarState = ApplicationChrome.States.Hidden;
        heatMapGen = this.GetComponent<HeatmapGenerator>();
        Texture2D tempTex;
        float maxTime;
        float outOfBoundRatio;
        if (PresentationData.out_HGGazeData != null)
        {
            heatMapGen.GenerateMap(PresentationData.out_HGGazeData, 0, PresentationData.out_ExitTime, out tempTex, out maxTime, out outOfBoundRatio);
            heatmapHolder.GetComponent<Image>().sprite = Sprite.Create(tempTex, new Rect(0, 0, tempTex.width, tempTex.height), new Vector2(0.5f, 0.5f));
            screenshotHolder.GetComponent<Image>().sprite = Sprite.Create(PresentationData.out_Screenshot, new Rect(0, 0, PresentationData.out_Screenshot.width, PresentationData.out_Screenshot.height), new Vector2(0.5f, 0.5f));
        }

        //set up audio source
        if (audioSource == null)
        {
            //UnityEngine.Debug.Log("get audio source"); 
            audioSource = gameObject.GetComponent<AudioSource>();
        }

        if (audioSource.clip != null)
            audioSource.clip = null;
        
        pcmToUnityClip = new AudioProcessingJob();
        if ((PresentationData.out_RecordingFilePath != null) && (PresentationData.out_RecordingFilePath != ""))
            pcmToUnityClip.setUpFile(PresentationData.out_RecordingFilePath);
        else
            pcmToUnityClip.setUpFile(@"C:\Users\xunchis\record.pcm");
            //pcmToUnityClip.setUpFile(@"C:\Users\jaekyunk\Desktop\VR_Rehearsal\VR_Rehearsal_app\record.pcm");

        //set up slide transition data
        out_SlidesTransitionRecord = new List<KeyValuePair<float, int>>();

        if ((PresentationData.out_SlidesTransitionRecord != null) && (PresentationData.out_SlidesTransitionRecord.Count >= 0))
            out_SlidesTransitionRecord = PresentationData.out_SlidesTransitionRecord;
        else
        {
            //give it some test data
            out_SlidesTransitionRecord = new List<KeyValuePair<float, int>>();
            out_SlidesTransitionRecord.Add(new KeyValuePair<float, int>(0.0f, 0));
            out_SlidesTransitionRecord.Add(new KeyValuePair<float, int>(1.0f, 1));
            out_SlidesTransitionRecord.Add(new KeyValuePair<float, int>(5.0f, 2));
            out_SlidesTransitionRecord.Add(new KeyValuePair<float, int>(10.0f, 3));
            out_SlidesTransitionRecord.Add(new KeyValuePair<float, int>(15.0f, 4));
            out_SlidesTransitionRecord.Add(new KeyValuePair<float, int>(20.0f, 5));
            out_SlidesTransitionRecord.Add(new KeyValuePair<float, int>(22.0f, 6)); //the last shoot
            out_SlidesTransitionRecord.Add(new KeyValuePair<float, int>(26.0f, 7));
            out_SlidesTransitionRecord.Add(new KeyValuePair<float, int>(35.0f, 8));
            out_SlidesTransitionRecord.Add(new KeyValuePair<float, int>(55.0f, 9));
            out_SlidesTransitionRecord.Add(new KeyValuePair<float, int>(70.0f, 10));
            out_SlidesTransitionRecord.Add(new KeyValuePair<float, int>(82.0f, 11));
        }

        //prepare duration data
        slideTimingRecord = new List<KeyValuePair<int, float>>();

        //for (int j = 0; j < out_SlidesTransitionRecord.Count; j++ )
        //{
        //    UnityEngine.Debug.Log(out_SlidesTransitionRecord[j].Key + " + " + out_SlidesTransitionRecord[j].Value);
        //}

        //UnityEngine.Debug.Log("brain power!! " + out_SlidesTransitionRecord.Count + " = " + (out_SlidesTransitionRecord.Count-1/6) + ")");
        startTimeForThumbnailGroup = new float[(out_SlidesTransitionRecord.Count-2)/ 6+1];
        //UnityEngine.Debug.Log("startTimeForThumbnailGroup has " + (out_SlidesTransitionRecord.Count - 2) / 6 + "+1 records");
        for (int i = 0; i < out_SlidesTransitionRecord.Count-1; i++)
        {
            float time = out_SlidesTransitionRecord[i].Key;
            int slideNo = out_SlidesTransitionRecord[i].Value;

           //get the duration
            float dur = out_SlidesTransitionRecord[i + 1].Key - time;
            slideTimingRecord.Add(new KeyValuePair<int, float>(slideNo, dur));
            if (i % 6 == 0)
            {
                //Debug.Log("*"+i+"* Group #" + (i / 6) + " starts on " + out_SlidesTransitionRecord[i].Key);
                startTimeForThumbnailGroup[i / 6] = out_SlidesTransitionRecord[i].Key;
            }

            //UnityEngine.Debug.Log("transition is picked: " + dur + " (#" + slideNo + ")");
        }
        pcmToUnityClip.setUpSlideTransitionData(slideTimingRecord);
        
        pcmToUnityClip.Start();
        isProcessingAudio = true;
	}
    // Use this for initialization
    void Start()
    {
        Debug.Log("Enter Eval Scene");
        //set volume control
        //#if UNITY_ANDROID
        //        unity = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        //        currentActivity = unity.GetStatic<AndroidJavaObject>("currentActivity");
        //        currentActivity.Call("ChangeVolumeControl");
        //        Debug.Log("Tried to active volume button control");
        //#endif
        //setup heatmap
        ApplicationChrome.statusBarState = ApplicationChrome.navigationBarState = ApplicationChrome.States.Hidden;
        heatMapGen = this.GetComponent <HeatmapGenerator>();
        Texture2D tempTex;
        float     maxTime;
        float     outOfBoundRatio;

        if (PresentationData.out_HGGazeData != null)
        {
            heatMapGen.GenerateMap(PresentationData.out_HGGazeData, 0, PresentationData.out_ExitTime, out tempTex, out maxTime, out outOfBoundRatio);
            heatmapHolder.GetComponent <Image>().sprite    = Sprite.Create(tempTex, new Rect(0, 0, tempTex.width, tempTex.height), new Vector2(0.5f, 0.5f));
            screenshotHolder.GetComponent <Image>().sprite = Sprite.Create(PresentationData.out_Screenshot, new Rect(0, 0, PresentationData.out_Screenshot.width, PresentationData.out_Screenshot.height), new Vector2(0.5f, 0.5f));
        }

        //set up audio source
        if (audioSource == null)
        {
            //UnityEngine.Debug.Log("get audio source");
            audioSource = gameObject.GetComponent <AudioSource>();
        }

        if (audioSource.clip != null)
        {
            audioSource.clip = null;
        }

        pcmToUnityClip = new AudioProcessingJob();
        if ((PresentationData.out_RecordingFilePath != null) && (PresentationData.out_RecordingFilePath != ""))
        {
            pcmToUnityClip.setUpFile(PresentationData.out_RecordingFilePath);
        }
        else
        {
            pcmToUnityClip.setUpFile(@"C:\Users\xunchis\record.pcm");
        }
        //pcmToUnityClip.setUpFile(@"C:\Users\jaekyunk\Desktop\VR_Rehearsal\VR_Rehearsal_app\record.pcm");

        //set up slide transition data
        out_SlidesTransitionRecord = new List <KeyValuePair <float, int> >();

        if ((PresentationData.out_SlidesTransitionRecord != null) && (PresentationData.out_SlidesTransitionRecord.Count >= 0))
        {
            out_SlidesTransitionRecord = PresentationData.out_SlidesTransitionRecord;
        }
        else
        {
            //give it some test data
            out_SlidesTransitionRecord = new List <KeyValuePair <float, int> >();
            out_SlidesTransitionRecord.Add(new KeyValuePair <float, int>(0.0f, 0));
            out_SlidesTransitionRecord.Add(new KeyValuePair <float, int>(1.0f, 1));
            out_SlidesTransitionRecord.Add(new KeyValuePair <float, int>(5.0f, 2));
            out_SlidesTransitionRecord.Add(new KeyValuePair <float, int>(10.0f, 3));
            out_SlidesTransitionRecord.Add(new KeyValuePair <float, int>(15.0f, 4));
            out_SlidesTransitionRecord.Add(new KeyValuePair <float, int>(20.0f, 5));
            out_SlidesTransitionRecord.Add(new KeyValuePair <float, int>(22.0f, 6)); //the last shoot
            out_SlidesTransitionRecord.Add(new KeyValuePair <float, int>(26.0f, 7));
            out_SlidesTransitionRecord.Add(new KeyValuePair <float, int>(35.0f, 8));
            out_SlidesTransitionRecord.Add(new KeyValuePair <float, int>(55.0f, 9));
            out_SlidesTransitionRecord.Add(new KeyValuePair <float, int>(70.0f, 10));
            out_SlidesTransitionRecord.Add(new KeyValuePair <float, int>(82.0f, 11));
        }

        //prepare duration data
        slideTimingRecord = new List <KeyValuePair <int, float> >();

        //for (int j = 0; j < out_SlidesTransitionRecord.Count; j++ )
        //{
        //    UnityEngine.Debug.Log(out_SlidesTransitionRecord[j].Key + " + " + out_SlidesTransitionRecord[j].Value);
        //}

        //UnityEngine.Debug.Log("brain power!! " + out_SlidesTransitionRecord.Count + " = " + (out_SlidesTransitionRecord.Count-1/6) + ")");
        startTimeForThumbnailGroup = new float[(out_SlidesTransitionRecord.Count - 2) / 6 + 1];
        //UnityEngine.Debug.Log("startTimeForThumbnailGroup has " + (out_SlidesTransitionRecord.Count - 2) / 6 + "+1 records");
        for (int i = 0; i < out_SlidesTransitionRecord.Count - 1; i++)
        {
            float time    = out_SlidesTransitionRecord[i].Key;
            int   slideNo = out_SlidesTransitionRecord[i].Value;

            //get the duration
            float dur = out_SlidesTransitionRecord[i + 1].Key - time;
            slideTimingRecord.Add(new KeyValuePair <int, float>(slideNo, dur));
            if (i % 6 == 0)
            {
                //Debug.Log("*"+i+"* Group #" + (i / 6) + " starts on " + out_SlidesTransitionRecord[i].Key);
                startTimeForThumbnailGroup[i / 6] = out_SlidesTransitionRecord[i].Key;
            }

            //UnityEngine.Debug.Log("transition is picked: " + dur + " (#" + slideNo + ")");
        }
        pcmToUnityClip.setUpSlideTransitionData(slideTimingRecord);

        pcmToUnityClip.Start();
        isProcessingAudio = true;
    }