import { describe, expect, it } from 'vitest'
import {
  KEY_CODE,
  POSITION,
  SORT,
  REFRESH_INTERVAL,
  IPTHRESHOLD,
  DATE,
  DATEPICKER,
  BROWSER_NAME,
  MOUSEDELTA,
  VALIDATE_STATE,
  CASCADER
} from '../index'

describe('通用常量工具测试', () => {
  describe('KEY_CODE', () => {
    it('应该包含正确的键盘按键码', () => {
      expect(KEY_CODE.Enter).toBe(13)
      expect(KEY_CODE.Space).toBe(32)
      expect(KEY_CODE.ArrowLeft).toBe(37)
      expect(KEY_CODE.ArrowRight).toBe(39)
      expect(KEY_CODE.KeyA).toBe(65)
      expect(KEY_CODE.Digit1).toBe(49)
    })
  })

  describe('POSITION', () => {
    it('应该包含正确的位置常量', () => {
      expect(POSITION.Left).toBe('left')
      expect(POSITION.Right).toBe('right')
      expect(POSITION.Top).toBe('top')
      expect(POSITION.Bottom).toBe('bottom')
    })
  })

  describe('SORT', () => {
    it('应该包含正确的排序方向常量', () => {
      expect(SORT.Asc).toBe('asc')
      expect(SORT.Desc).toBe('desc')
    })
  })

  describe('REFRESH_INTERVAL', () => {
    it('应该是正确的刷新间隔值', () => {
      expect(REFRESH_INTERVAL).toBe(100)
    })
  })

  describe('IPTHRESHOLD', () => {
    it('应该包含正确的IP地址阈值常量', () => {
      expect(IPTHRESHOLD.Min).toBe(0)
      expect(IPTHRESHOLD.Max).toBe(255)
      expect(IPTHRESHOLD.NonNumeric).toBe(25)
    })
  })

  describe('DATE', () => {
    it('应该包含正确的日期格式常量', () => {
      expect(DATE.Date).toBe('yyyy-MM-dd')
      expect(DATE.Time).toBe('hh:mm')
      expect(DATE.Datetime).toBe('yyyy-MM-dd hh:mm')
      expect(DATE.YearMonth).toBe('yyyy-MM')
    })
  })

  describe('DATEPICKER', () => {
    it('应该包含日期选择器的基本格式常量', () => {
      expect(DATEPICKER.Day).toBe('day')
      expect(DATEPICKER.Date).toBe('date')
      expect(DATEPICKER.Month).toBe('month')
      expect(DATEPICKER.Week).toBe('week')
      expect(DATEPICKER.Year).toBe('year')
    })

    it('应该包含正确的日期格式映射', () => {
      expect(DATEPICKER.DateFormats.date).toBe('yyyy-MM-dd')
      expect(DATEPICKER.DateFormats.month).toBe('yyyy-MM')
      expect(DATEPICKER.DateFormats.datetime).toBe('yyyy-MM-dd HH:mm:ss')
    })

    it('应该包含周和月份的简称列表', () => {
      expect(DATEPICKER.Weeks).toHaveLength(7)
      expect(DATEPICKER.Weeks[0]).toBe('sun')
      expect(DATEPICKER.MonhtList).toHaveLength(12)
      expect(DATEPICKER.MonhtList[0]).toBe('jan')
    })
  })

  describe('BROWSER_NAME', () => {
    it('应该包含正确的浏览器名称常量', () => {
      expect(BROWSER_NAME.Chrome).toBe('chrome')
      expect(BROWSER_NAME.Firefox).toBe('firefox')
      expect(BROWSER_NAME.Edge).toBe('edge')
      expect(BROWSER_NAME.IE).toBe('ie')
    })
  })

  describe('MOUSEDELTA', () => {
    it('应该是正确的鼠标滚轮增量值', () => {
      expect(MOUSEDELTA).toBe(120)
    })
  })

  describe('VALIDATE_STATE', () => {
    it('应该包含正确的表单验证状态常量', () => {
      expect(VALIDATE_STATE.Validating).toBe('validating')
      expect(VALIDATE_STATE.Success).toBe('success')
      expect(VALIDATE_STATE.Error).toBe('error')
    })
  })

  describe('CASCADER', () => {
    it('应该包含级联选择器的常量', () => {
      expect(CASCADER.CascaderMenu).toBe('.tiny-cascader-menu')
      expect(CASCADER.InputClass).toBe('.tiny-input__inner')
      expect(CASCADER.MenuConnector).toBe('cascader-menu-')
    })

    it('应该包含属性映射对象', () => {
      expect(CASCADER.PropsObject).toHaveProperty('expand-trigger')
      expect(CASCADER.PropsObject).toHaveProperty('change-on-select')
      expect(CASCADER.PropsObject).toHaveProperty('hover-threshold')
    })

    it('应该包含事件映射对象', () => {
      expect(CASCADER.EventObject).toHaveProperty('active-item-change')
    })
  })
})