using MEU.API.Config;
//using MEU.API.Models;
using Sieve.Models;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Threading.Tasks;

namespace MEU.API.Utils
{

    
    public class CommonUtils
    {
        public static DateTime ConvertToClientStartDate(DateTime dtInput) {
            if (dtInput.Hour > 12)
            {
                return dtInput.AddHours(24 - dtInput.Hour);
            }
            else
            {
                return dtInput.AddHours(-dtInput.Hour);
            }
        }
        private static readonly string[] VietnameseSigns = new string[]
        {

            "aAeEoOuUiIdDyY",

            "áàạảãâấầậẩẫăắằặẳẵ",

            "ÁÀẠẢÃÂẤẦẬẨẪĂẮẰẶẲẴ",

            "éèẹẻẽêếềệểễ",

            "ÉÈẸẺẼÊẾỀỆỂỄ",

            "óòọỏõôốồộổỗơớờợởỡ",

            "ÓÒỌỎÕÔỐỒỘỔỖƠỚỜỢỞỠ",

            "úùụủũưứừựửữ",

            "ÚÙỤỦŨƯỨỪỰỬỮ",

            "íìịỉĩ",

            "ÍÌỊỈĨ",

            "đ",

            "Đ",

            "ýỳỵỷỹ",

            "ÝỲỴỶỸ"
        };

        //public static string getFullName(user usr)
        //{
        //    if (usr==null)
        //    {
        //        return "";
        //    }
        //    return (usr?.first_name?.Trim() + " " + usr?.middle_name?.Trim() + " " + usr?.last_name?.Trim()).Replace("  ", " ");
        //}
        public static string RemoveSignAndLowerCase4VietnameseString(string str)
        {
            str = str.ToLower();
            for (int i = 1; i < VietnameseSigns.Length; i++)
            {
                for (int j = 0; j < VietnameseSigns[i].Length; j++)
                    str = str.Replace(VietnameseSigns[i][j], VietnameseSigns[0][i - 1]);
            }
            return str;
        }
        public static DateTime FirstDateOfWeekISO8601(int year, int weekOfYear)
        {
            DateTime jan1 = new DateTime(year, 1, 1);
            int daysOffset = DayOfWeek.Thursday - jan1.DayOfWeek;

            // Use first Thursday in January to get first week of the year as
            // it will never be in Week 52/53
            DateTime firstThursday = jan1.AddDays(daysOffset);
            var cal = CultureInfo.CurrentCulture.Calendar;
            int firstWeek = cal.GetWeekOfYear(firstThursday, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);

            var weekNum = weekOfYear;
            // As we're adding days to a date in Week 1,
            // we need to subtract 1 in order to get the right date for week #1
            if (firstWeek == 1)
            {
                weekNum -= 1;
            }

            // Using the first Thursday as starting week ensures that we are starting in the right year
            // then we add number of weeks multiplied with days
            var result = firstThursday.AddDays(weekNum * 7);

            // Subtract 3 days from Thursday to get Monday, which is the first weekday in ISO8601
            return result.AddDays(-3);
        }
        public static int? getTakeNumber(SieveModel sieveModel)
        {
            int? take = null;

            if (string.IsNullOrEmpty(sieveModel.Filters) && string.IsNullOrEmpty(sieveModel.Sorts))
            {
                if (sieveModel.PageSize == null)
                    take = ConfigEnvironment.DEFAULT_PAGE_SIZE;
                else
                    take = sieveModel.PageSize.Value;
            }

            return take;

        }
    }
}