import { getUsrId } from '@/services/bus/user'
import moment, { Moment } from "moment"
import { ref, SetupContext } from "vue"
import { reportCycleType, reportCyleTimeType } from "./enum"
import { Value } from "./interface"

export function handleReprotType(context: SetupContext) {
    // 选中的周期类型
    const selectedReportType = ref<Value>({ key: reportCycleType.day })
    // 时间格式化类型
    const dateFormat = ref<reportCyleTimeType>(reportCyleTimeType.day)
    // 时间
    const time = ref<Moment>(getInitTime());
    // 交易用户
    const selectedUser = ref<Value>({ key: getUsrId() })
    // 周期类型与时间类型 一对一的关系
    const timeMap = new Map([
        [reportCycleType.day, reportCyleTimeType.day],
        [reportCycleType.month, reportCyleTimeType.month],
        [reportCycleType.year, reportCyleTimeType.year],
        [reportCycleType.week, reportCyleTimeType.week],
    ])
    // 报表类型
    const reportType = ref<{ value: number, lable: string }[]>([
        { value: reportCycleType.day, lable: '日报表' },
        { value: reportCycleType.week, lable: '周报表' },
        { value: reportCycleType.month, lable: '月报表' },
    ])
    // 初始化时间
    function getInitTime() {
        const yesterday = moment().add(-1, 'days')
        return moment(yesterday, dateFormat.value)
    }
    function getFomateType(): reportCyleTimeType {
        const { key } = selectedReportType.value
        const temp = timeMap.get(key)
        return temp ? temp : reportCyleTimeType.day
    }
    // 周期类型变更
    function reportTypeChange() {
        time.value = getInitTime()
        dateFormat.value = getFomateType()
        update()

    }
    // 时间变更
    function timeChange() {
        update()
    }
    // 交易用户变更
    function userChange() {
        update()
    }
    // 根据周期类型 格式化时间
    function formateTime() {
        return moment(time.value).format(getFomateType())
    }
    // 是否为 月报表
    function isMonth() {
        return selectedReportType.value.key === reportCycleType.month
    }
    // 通知上层更新数据
    function update() {
        const param = { cycletype: selectedReportType.value.key, cycletime: formateTime(), userid: selectedUser.value.key }
        context.emit('update', param)
    }
    return { selectedReportType, reportType, isMonth, reportTypeChange, dateFormat, time, timeChange, selectedUser, userChange }
}

export function handleInitTypeAndTime() {
    // 初始化时间
    function getInitTime() {
        const yesterday = moment().add(-1, 'days')
        return moment(yesterday).format(reportCyleTimeType.day)
    }
    // 初始化类型
    function getInitType() {
        return reportCycleType.day
    }
    return { getInitTime, getInitType }
}

