using System;
using iiie.CacheControl.Attributes;
using iiie.CacheControl.DBO;

namespace iiie.CacheControl.Business.Attributes
{
    /// <summary>
    /// A basic cache control based on time
    /// </summary>
    public class TimeCacheControlAttribute : CacheControlAttribute
    {
        /// <summary>
        /// The number of seconds the cache is valid
        /// </summary>
        protected int Seconds { get; set; }

        /// <summary>
        /// Contruct a cache control based on time
        /// </summary>
        public TimeCacheControlAttribute(int seconds, bool excludeGet = false, bool excludePost = false)
        {
            Seconds = seconds;
            ExcludePostFromCacheKey = excludePost;
            ExcludeQueryStringFromCacheKey = excludeGet;
        }

        /// <summary>
        /// Check if data has been cached for less than Senconds seconds
        /// </summary>
        /// <param name="data">The cached data</param>
        /// <returns>True if cache is still valid</returns>
        protected override bool IsValid(CacheDbo data)
        {
            return data.Date.AddSeconds(Seconds) >= DateTime.Now;
        }
    }
}
