using System;
using System.Collections.Generic;
using System.Web;
using TABS.MailCarrier.WebSDK.Calendar;

/// <summary>
/// 빈번하게 사용된 Holiday 클래스를 캐시해서 성능을 개선한다.
///  - 30분 마다 캐시를 갱신한다.
/// </summary>
public class HolidayCache
{
    static object _thisLock = new object();

    private HolidayCache()
    {
    }

    public static Holiday GetHoliday()
    {
        HttpContext context = HttpContext.Current;
        Guid domainId = WebUser.CurrentUser.DomainID;

        string countray = "ko";
        string cacheKey = domainId.ToString() + countray;
        Holiday holiday = (Holiday)context.Cache[cacheKey];
        if (holiday == null)
        {
            lock (_thisLock)
            {
                holiday = (Holiday)context.Cache[cacheKey];
                if (holiday == null)
                {
                    holiday = new Holiday(domainId, countray);
                    // 30분 마다 공휴일 정보를 로딩한다.
                    context.Cache.Insert(cacheKey, holiday, null, DateTime.UtcNow.AddMinutes(30), System.Web.Caching.Cache.NoSlidingExpiration);
                }
            }
        }
        return holiday;
    }
}
