import { InstanceV3 } from './v3'
import { InstanceV4 } from './v4'
import { InstanceV5 } from './v5'
import { InstanceV6 } from './v6'

const instancesMigration = {
  4: (state: InstanceV3) => {
    return {
      instances: state.local.instances.map((instance, index) => {
        // @ts-ignore
        delete instance.notification
        return {
          ...instance,
          active: state.local.activeIndex === index,
          push: {
            global: { loading: false, value: false },
            decode: { loading: false, value: false },
            alerts: {
              follow: { loading: false, value: true },
              favourite: { loading: false, value: true },
              reblog: { loading: false, value: true },
              mention: { loading: false, value: true },
              poll: { loading: false, value: true }
            },
            keys: undefined
          }
        }
      })
    }
  },
  5: (state: InstanceV4) => {
    // @ts-ignore
    if (state.instances.length && !state.instances[0].notifications_filter) {
      return {
        instances: state.instances.map(instance => {
          // @ts-ignore
          instance.notifications_filter = {
            follow: true,
            favourite: true,
            reblog: true,
            mention: true,
            poll: true,
            follow_request: true
          }
          return instance
        })
      }
    } else {
      return state
    }
  },
  6: (state: InstanceV5) => {
    return {
      instances: state.instances.map(instance => {
        return { ...instance, configuration: undefined }
      })
    }
  },
  7: (state: InstanceV6) => {
    return {
      instances: state.instances.map(instance => {
        return {
          ...instance,
          timelinesLookback: {},
          mePage: {
            lists: { shown: false },
            announcements: { shown: false, unread: 0 }
          }
        }
      })
    }
  }
}

export default instancesMigration
