import { LUNAR_VALIDITY_RANGE } from './utils'

const { MIN_YAER: minYear, MAX_YAER: maxYear } = LUNAR_VALIDITY_RANGE

// 24节气最小日期
const termMinDate = [4, 19, 3, 18, 4, 19, 4, 19, 4, 20, 4, 20, 6, 22, 6, 22, 6, 22, 7, 22, 6, 21, 6, 21]
// 24节气日期数据压缩：日期减去最小日期，差值视为4进制，再转32进制
const termData = [
  '4lkmd5j6l5',
  '55kql9lal9',
  '59lanalala',
  '5avbnatqla',
  '7akmd5j6l5',
  '55kql9lal9',
  '59lalalala',
  '5avbnatqla',
  '7akmd5j6l5',
  '55kql9lal9',
  '59lalalala',
  '5avbnatqla',
  '7akmd5j6l5',
  '4lkql9lal9',
  '55kqlalala',
  '5ananalqla',
  '5akmd5j5kl',
  '4lkqd9l6l5',
  '55kqlalal9',
  '5ananalqla',
  '5akmd5j5kl',
  '4lkmd9l6l5',
  '55kqlalal9',
  '59lanalqla',
  '5akmd5j5kl',
  '4lkmd9l6l5',
  '55kql9lal9',
  '59lanalala',
  '5akmclj5al',
  '4lkmd5j6l5',
  '55kql9lal9',
  '59lanalala',
  '5akmclj5al',
  '4lkmd5j6l5',
  '55kql9lal9',
  '59lalalala',
  '5akmclj5al',
  '4lkmd5j6l5',
  '55kql9lal9',
  '59lalalala',
  '5akmclj5al',
  '4lkmd5j6l5',
  '55kql9lal9',
  '59lalalala',
  '5aklclj5al',
  '4lkmd5j5kl',
  '4lkql9l6l9',
  '55kqlalala',
  '5aclclb5al',
  '2lkmd5j5kl',
  '4lkmd9l6l9',
  '55kqlalala',
  '5aclclb5al',
  '2lkmd5j5kl',
  '4lkmd9l6l5',
  '55kql9lal9',
  '5aalclb5al',
  '2lkmd5j5kl',
  '4lkmd5j6l5',
  '55kql9lal9',
  '59alclalal',
  '2lkmclj5al',
  '4lkmd5j6l5',
  '55kql9lal9',
  '59alclalal',
  '2lkmclj5al',
  '4lkmd5j6l5',
  '55kql9lal9',
  '59alalalal',
  '2lkmclj5al',
  '4lkmd5j6l5',
  '55kql9lal9',
  '59alalalal',
  '2lklclj5al',
  '4lkmd5j6l5',
  '55kql9l6l9',
  '59a5alalal',
  '2lklclb5al',
  '4lkmd5j5l5',
  '55kqd9l6l9',
  '59a5alalal',
  '2lklclb5al',
  '4lkmd5j5kl',
  '4lkmd9l6l9',
  '55a5akalal',
  '2lclclb5al',
  '2lkmd5j5kl',
  '4lkmd5l6l5',
  '55a5akalak',
  '2lalclalal',
  '2lkmclj5kl',
  '4lkmd5j6l5',
  '55a5akalak',
  '2kalclalal',
  '2lkmclj5al',
  '4lkmd5j6l5',
  '55a5akalak',
  '2kalalalal',
  '2lkmclj5al',
  '4lkmd5j6l5',
  '55a5akalak',
  '2kalalalal',
  '2lkmclj5al',
  '4lkmd5j6l5',
  '55a5akalak',
  '2kalalalal',
  '2lklclb5al',
  '4lkmd5j6l5',
  '55a5akahak',
  '2ka5alalal',
  '2lklclb5al',
  '4lkmd5j5l5',
  '55a52kahak',
  '2ka5akalal',
  '2lklclb5al',
  '4lkmd5j5kl',
  '4la12kahak',
  '2ga5akalal',
  '2lclclb5al',
  '2lkmclj5kl',
  '4la12g8hak',
  '2ga5akalak',
  '2lalclalal',
  '2lkmclj5kl',
  '4la12g8hag',
  '2ga5akalak',
  '2kalalalal',
  '2lkmclj5al',
  '4la12g8hag',
  '2ga5akalak',
  '2kalalalal',
  '2lkmclj5al',
  '4la12g8hag',
  '2ga5akalak',
  '2kalalalal',
  '2lklclb5al',
  '4la12g8hag',
  '2ga5akalak',
  '2kalalalal',
  '2lklclb5al',
  '4la12g8hag',
  '2ga52kahak',
  '2ka5alalal',
  '2lklclb5al',
  '4la12g8gag',
  '2ga12kahak',
  '2ka5akalal',
  '2lklclb5al',
  '4la1208ga0',
  '20a12g8hak',
  '2ga5akalal',
  '2lalclalal',
  '2la1208ga0',
  '20a12g8hak',
  '2ga5akalal',
  '2lalalalal',
  '2la1208ga0',
  '20a12g8hag',
  '2ga5akalak',
  '2lalalalal',
  '2la1208g00',
  '20a12g8hag',
  '2ga5akalak',
  '2kalalalal',
  '2la1208g00',
  '20a12g8hag',
  '2ga5akalak',
  '2kalalalal',
  '2la0200g00',
  '20a12g8hag',
  '2ga52kahak',
  '2kalalalal',
  '2la0200g00',
  '20a12g8gag',
  '2ga52kahak',
  '2ka5akalal',
  '2la0200g00',
  '20a12g8gag',
  '2ga12gahak',
  '2ka5akalal',
  '2la0200g00',
  '20a1208ga0',
  '2ga12g8hak',
  '2ga5akalal',
  '2l00200000',
  'a1208ga0',
  '20a12g8hak',
  '2ga5akalal',
  '2l00000000',
  'a1208ga0',
  '20a12g8hag',
  '2ga5akalak',
  '2l00000000',
  'a1208g00',
  '20a12g8hag',
  '2ga5akalak',
  '2k00000000',
  'a1200g00',
  '20a12g8hag',
  '2ga5akalak',
  '2kalalalal'
]
// 24节气
const termMap = [
  '小寒',
  '大寒',
  '立春',
  '雨水',
  '惊蛰',
  '春分',
  '清明',
  '谷雨',
  '立夏',
  '小满',
  '芒种',
  '夏至',
  '小暑',
  '大暑',
  '立秋',
  '处暑',
  '白露',
  '秋分',
  '寒露',
  '霜降',
  '立冬',
  '小雪',
  '大雪',
  '冬至'
]

// 获取指定年份的24节气日期数据
export function getTermDate(sYear: number) {
  if (sYear < minYear || sYear > maxYear) {
    return false
  }
  let data = termData[sYear - minYear]
  let num4 = parseInt(data, 32).toString(4)
  if (num4.length != 24) {
    num4 = '0' + num4
  }
  return num4.split('').map(function (value, index) {
    return +value + termMinDate[index]
  })
}

// 获取节气
export function getTerm(sYear: number, sMonth: number, sDay: number) {
  let term = ''
  let termDate = getTermDate(sYear)
  if (!termDate) {
    throw new Error('year out')
  }
  termDate.push(31)
  termDate.forEach(function (day, index) {
    let month = Math.floor(index / 2) + 1
    if (sMonth == month && sDay == day) {
      term = termMap[index]
    }
  })
  return term
}
