import { defineStore, storeToRefs } from 'pinia'
import type { RouteLocation } from 'vue-router'
import { userStore } from './user'
import hud from '@/utils/hud'
import dayjs from 'dayjs'
import { useHomeRedPointStore } from './home-red-point'
import { taskStore } from './taskJump'

// 导学任务的黑名单
const lead_black_list = [
  '/subject', // 学科
  '/subject/learningArtifact', // 学习神器
]

// 刚好相等
const path_white_list = [
  '/',
  '/login',
  '/subject', // 学科
  '/subject/learningArtifact', // 学习神器
  '/system/setting', // 设置
]

// 路径前缀
const path_prefix_white_list = [
  '/task', // 任务
  '/system/homeWork', // 作业
  '/init', // 初始化
  '/subject/textbook', // 教材选择
  '/subject/freeStudy', // 自由学
  '/subject/aiStudy', // ai精准学
  '/subject/wrongBook', // 错题本
  '/subject/groupPaper', // 自由组卷
  '/subject/studyVideo', // 学习视频
  '/subject/learnWord', // 旧版灵犀学
  '/subject/languageSense', // 语感
  '/subject/phoneticTranscription', // 音标
  '/subject/happyRead', // 乐读
  '/subject/dictionaries', // 词典
  '/subject/strangeBook', // 生词本
  '/subject/englishBasic', // 英语零基础（视频）
  '/subject/wordDetails', // 单词详情
  '/subject/doWork', // 做题
  '/subject/explain', // 讲解
]
// 每隔多少分钟可以访问1次
const access_minute_interval = 20
const access_minute_interval_show = 15
// 每隔多少秒可以访问1次
const access_interval = access_minute_interval * 60

export const useStudentAccessStore = defineStore('student-access', () => {
  const { userInfo } = storeToRefs(userStore())
  const { status: taskStatus } = storeToRefs(taskStore())
  const lastAccessTime = ref('')

  const { redPointStatus } = storeToRefs(useHomeRedPointStore())

  function $reset() {
    lastAccessTime.value = ''
  }

  function _updateLastAccessTime() {
    lastAccessTime.value = dayjs().format('YYYY-MM-DD HH:mm:ss')
  }

  function _tryAccess() {
    if (taskStatus.value.leadStatus) {
      hud.error(`请先完成【导学任务】`)
      return false
    }

    if (!lastAccessTime.value) {
      // 第一次访问
      _updateLastAccessTime()
      return true
    }

    // 计算时间差
    const seconds = dayjs().diff(lastAccessTime.value, 'second')
    if (seconds >= access_interval) {
      _updateLastAccessTime()
      return true
    }

    hud.error(`积累${access_minute_interval_show}分钟有效学习时间，可访问此模块1次！加油！`)
    return false
  }

  function canAccess() {
    // return true
    // 如果不是学校学员，可以直接访问
    if (!userInfo.value.isTaskStudent) {
      return true
    }
    return _tryAccess()
  }

  function canAccessRoute(to: RouteLocation) {
    // return true
    // 如果不是学校学员，可以直接访问
    if (!userInfo.value.isTaskStudent) {
      return true
    }

    if (taskStatus.value.leadStatus && lead_black_list.includes(to.path)) {
      hud.error(`请先完成【导学任务】`)
      return false
    }

    if (path_white_list.includes(to.path)) {
      return true
    }
    for (const path of path_prefix_white_list) {
      if (to.path.startsWith(path)) {
        return true
      }
    }
    if (
      (redPointStatus.value.messageBox && to.path === '/system/mailbox') ||
      (redPointStatus.value.activity && to.path === '/system/activity') ||
      (redPointStatus.value.announcement && to.path === '/system/announcement')
    ) {
      // 有东西要领取
      _updateLastAccessTime()
      return true
    }
    return _tryAccess()
  }

  function resetAccess() {
    lastAccessTime.value = ''
  }

  return {
    lastAccessTime,
    resetAccess,
    $reset,
    canAccess,
    canAccessRoute,
  }
})
