import isString from 'lodash/isString'

const dateFormat = /^\d{4}-\d{2}-\d{2}/

/**
 * Проверяет имеет ли строка формат yyyy-MM-dd
 */
const isDateString = (value: string) => (
  isString(value) && dateFormat.test(value)
)

/**
 * Преобразовывает строку дату в объект Date
 * 2020-08-26T08:17:01.604Z => 2020-08-26
 */
const dateReviver = (key: string, value: string) => {
  if (isDateString(value)) {
    return new Date(value)
  }

  return value
}

/**
 * Считывает значение из стора по key
 */
export const readStorageInitialValue = (storage: Storage, key: string) => {
  const rawValue = storage.getItem(key)
  if (rawValue) {
    try {
      return JSON.parse(rawValue, dateReviver)
    } catch (error) {
      return null
    }
  }
  return null
}
