using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;

namespace AwInitilizer.Assist
{
    public class EvHttpClientLogger
    {
        public static EvHttpClientLogger Instance => _Instance;

        private static EvHttpClientLogger _Instance = new EvHttpClientLogger();

        private EvHttpClientLogger()
        {
            if (!Directory.Exists(FolderName))
            {
                Directory.CreateDirectory(FolderName);
            }
        }
        private const string FolderName = "ApiLog";
        private const int MaxLogCnt = 10;
        private string LogFileName = null;

        internal void StartNewLog(string name)
        {
            TryRemoveOneLog();
            LogFileName = name + DateTime.Now.ToString("yyyyMMddHHmmssffff") + ".txt";
        }

        internal void Log(string mesasage)
        {
            if (string.IsNullOrEmpty(LogFileName))
            {
                return;
            }
            File.AppendAllText(Path.Combine(FolderName, LogFileName), mesasage + Environment.NewLine);
        }

        private void TryRemoveOneLog()
        {
            var files = Directory.GetFiles(FolderName).ToList();
            if (files.Count < MaxLogCnt)
            {
                return;
            }

            List<FileInfo> fileInfos = new List<FileInfo>();
            foreach (var file in files)
            {
                fileInfos.Add(new FileInfo(file));
            }
            var candidateFile = fileInfos.OrderBy(x => x.LastWriteTimeUtc).First();
            candidateFile.Delete();
        }
    }
}