import '@testing-library/jest-dom'
import { convertToDateObject } from '../utils'

describe('Calendar Utils - Timezone Fix Tests', () => {
  describe('convertToDateObject timezone regression tests', () => {
    it('correctly parses MM/DD/YYYY format without timezone shifting', () => {
      const result = convertToDateObject('2/16/2022', 'day')
      expect(result).toBeTruthy()
      
      if (result) {
        expect(result.getFullYear()).toBe(2022)
        expect(result.getMonth()).toBe(1) // February (0-based)
        expect(result.getDate()).toBe(16)
        expect(result.getHours()).toBe(0) // Should be midnight local time
        expect(result.getMinutes()).toBe(0)
        expect(result.getSeconds()).toBe(0)
      }
    })

    it('maintains correct date across different test scenarios', () => {
      const testCases = [
        { input: '2/16/2022', expectedYear: 2022, expectedMonth: 1, expectedDay: 16 },
        { input: '12/25/2023', expectedYear: 2023, expectedMonth: 11, expectedDay: 25 },
        { input: '1/1/2024', expectedYear: 2024, expectedMonth: 0, expectedDay: 1 },
        { input: '6/15/2023', expectedYear: 2023, expectedMonth: 5, expectedDay: 15 }
      ]
      
      testCases.forEach(({ input, expectedYear, expectedMonth, expectedDay }) => {
        const result = convertToDateObject(input, 'day')
        expect(result).toBeTruthy()
        
        if (result) {
          expect(result.getFullYear()).toBe(expectedYear)
          expect(result.getMonth()).toBe(expectedMonth)
          expect(result.getDate()).toBe(expectedDay)
          // Time should always be midnight local time
          expect(result.getHours()).toBe(0)
        }
      })
    })

    it('handles leap year correctly', () => {
      const result = convertToDateObject('2/29/2024', 'day')
      expect(result).toBeTruthy()
      
      if (result) {
        expect(result.getFullYear()).toBe(2024)
        expect(result.getMonth()).toBe(1) // February
        expect(result.getDate()).toBe(29)
      }
    })

    it('handles Date object input', () => {
      const inputDate = new Date(2022, 1, 16)
      const result = convertToDateObject(inputDate, 'day')
      expect(result).toBe(inputDate) // Should return same object
    })

    it('handles invalid Date object', () => {
      const invalidDate = new Date('invalid')
      const result = convertToDateObject(invalidDate, 'day')
      expect(result).toBeNull()
    })

    it('handles null input', () => {
      const result = convertToDateObject(null as any, 'day')
      expect(result).toBeNull()
    })

    it('handles invalid date strings', () => {
      const result = convertToDateObject('not-a-date', 'day')
      expect(result).toBeNull()
    })

    it('handles empty string', () => {
      const result = convertToDateObject('', 'day')
      expect(result).toBeNull()
    })
  })
})