using System.Collections;
using UnityEngine;
using System;
using Random = UnityEngine.Random;
using System.Globalization;

#if UNITY_ANDROID
//using Google.Play.Review;
#elif UNITY_IOS
using UnityEngine.iOS;
#endif

public class DataCheckMgr : MyCoroutine
{
    private static DataCheckMgr _ins;
    public static DataCheckMgr Ins { get { if (_ins == null) { _ins = new GameObject("DataCheckMgr").AddComponent<DataCheckMgr>(); DontDestroyOnLoad(_ins.gameObject); } return _ins; } }

    public int NewChapter { get; set; } = 0;

    public void Set()
    {
        StartCoroutine(Co_1Min());
        StartCoroutine(Co_1Sec());
    }

    IEnumerator Co_1Min()
    {
        //var sdata = ServerInfo.Ins.m_ServerData;

        while (true)
        {
            // 매시간 뉴스 체크
            //if (NewsGetTime != ServerInfo.ServerTime.Hour)
            //{
            //    ServerInfo.Ins.Get_News(news =>
            //    {
            //        NewsGetTime = ServerInfo.ServerTime.Hour;
            //        NoticeUI.list_news = news;
            //    });
            //}

            yield return new WaitForSeconds(60f);
        }
    }

    IEnumerator Co_1Sec()
    {
        //var sdata = ServerInfo.Ins.m_ServerData;
        bool checkinit = false;

        while (true)
        {
            // 게임 접속 중에 다음날이 됐을 때
            //if (!checkinit && sdata.Get_Common(eCommon.DOY_Day) != ServerInfo.ServerTime.DayOfYear)
            //    checkinit = true;
            //if (checkinit && !callinit)
            //{
            //    callinit = true;
            //    ServerInfo.Ins.Save_Init(result =>
            //    {
            //        checkinit = false;
            //        callinit = false;
            //        if (result.initDaily) sdata.Init_Daily(result.farmshop);
            //        if (result.initWeek)  sdata.Init_Week(SamplesCalendar.Get_WeekOfYear(ServerInfo.ServerTime));
            //        if (result.initMonth) sdata.Init_Month();
            //    });
            //}

            yield return new WaitForSeconds(1f);
        }
    }

#region 리뷰
    bool showReview;
    public void Show_Review(Action _act)
    {
        if (showReview) return;
        showReview = true;
        Set_Coroutine(_act, 1f);
#if UNITY_ANDROID
#if FGB_OneStore
        WebViewInfo.Ins.Show_WebView(MyValue.OnestoreURL);
#else
        //var reviewManager = new ReviewManager();

        //// start preloading the review prompt in the background
        //var playReviewInfoAsyncOperation = reviewManager.RequestReviewFlow();

        //// define a callback after the preloading is done
        //playReviewInfoAsyncOperation.Completed += playReviewInfoAsync =>
        //{
        //    if (playReviewInfoAsync.Error == ReviewErrorCode.NoError)
        //    {
        //        // display the review prompt
        //        var playReviewInfo = playReviewInfoAsync.GetResult();
        //        reviewManager.LaunchReviewFlow(playReviewInfo);
        //    }
        //    else
        //    {
        //        // handle error when loading review prompt
        //    }
        //};
#endif
#else
    #if UNITY_IOS
        Device.RequestStoreReview();
    #endif
#endif
    }
#endregion
}

public class SamplesCalendar
{
    public static int Get_WeekOfYear(DateTime _dt)
    {
        // Gets the Calendar instance associated with a CultureInfo.
        CultureInfo myCI = new CultureInfo("ko-KR");
        Calendar myCal = myCI.Calendar;

        // Gets the DTFI properties required by GetWeekOfYear.
        CalendarWeekRule myCWR = myCI.DateTimeFormat.CalendarWeekRule;
        DayOfWeek myFirstDOW = DayOfWeek.Monday;

        //Debug.LogFormat("The CalendarWeekRule used for the ko-KR culture is {0}.", myCWR);
        //Debug.LogFormat("The FirstDayOfWeek used for the ko-KR culture is {0}.", myFirstDOW);
        //Debug.LogFormat("Therefore, the current week is Week {0} of the current year.", myCal.GetWeekOfYear(_dt, myCWR, myFirstDOW));

        //DateTime LastDay = new DateTime(_dt.Year, 1, 1);
        //Debug.LogFormat("(1,1) There are {0} weeks in the current year ({1}).", myCal.GetWeekOfYear(LastDay, myCWR, myFirstDOW), LastDay.Year);
        //LastDay = new DateTime(_dt.Year, 1, 2);
        //Debug.LogFormat("(1,2) There are {0} weeks in the current year ({1}).", myCal.GetWeekOfYear(LastDay, myCWR, myFirstDOW), LastDay.Year);
        //LastDay = new DateTime(_dt.Year, 6, 30);
        //Debug.LogFormat("(6,30)There are {0} weeks in the current year ({1}).", myCal.GetWeekOfYear(LastDay, myCWR, myFirstDOW), LastDay.Year);
        //LastDay = new DateTime(_dt.Year, 7, 1);
        //Debug.LogFormat("(7,1)There are {0} weeks in the current year ({1}).", myCal.GetWeekOfYear(LastDay, myCWR, myFirstDOW), LastDay.Year);
        //LastDay = new DateTime(_dt.Year, 7, 2);
        //Debug.LogFormat("(7,2)There are {0} weeks in the current year ({1}).", myCal.GetWeekOfYear(LastDay, myCWR, myFirstDOW), LastDay.Year);
        //LastDay = new DateTime(_dt.Year, 7, 3);
        //Debug.LogFormat("(7,3)There are {0} weeks in the current year ({1}).", myCal.GetWeekOfYear(LastDay, myCWR, myFirstDOW), LastDay.Year);

        //// Displays the total number of weeks in the current year.
        //LastDay = new DateTime(_dt.Year, 12, 30);
        //Debug.LogFormat("(12,30)There are {0} weeks in the current year ({1}).", myCal.GetWeekOfYear(LastDay, myCWR, myFirstDOW), LastDay.Year);
        //LastDay = new DateTime(_dt.Year, 12, 31);
        //Debug.LogFormat("(12,31)There are {0} weeks in the current year ({1}).", myCal.GetWeekOfYear(LastDay, myCWR, myFirstDOW), LastDay.Year);
        //LastDay = new DateTime(_dt.Year + 1, 1, 1);
        //Debug.LogFormat("(1,1)There are {0} weeks in the current year ({1}).", myCal.GetWeekOfYear(LastDay, myCWR, myFirstDOW), LastDay.Year);
        //LastDay = new DateTime(_dt.Year + 1, 1, 2);
        //Debug.LogFormat("(1,2)There are {0} weeks in the current year ({1}).", myCal.GetWeekOfYear(LastDay, myCWR, myFirstDOW), LastDay.Year);

        return myCal.GetWeekOfYear(_dt, myCWR, myFirstDOW);
    }
}