package worker

import (
	"enterprise/common/model"
	"github.com/go-co-op/gocron"
	"time"
)

func InitCorp() {
	timezone, _ := time.LoadLocation("Asia/Shanghai")
	cron := gocron.NewScheduler(timezone)
	InitCorp1000(cron)
	InitCorp1002(cron)

	cron.StartAsync()
}

func InitCorp1002(cron *gocron.Scheduler) {
	corpId := int64(1002)
	staff := new(Staff)

	//同步每日考勤数据
	cron.Every(1).Day().At("05:00").Do(func() {
		checkIn := NewCheckin(corpId)
		go checkIn.SyncCheckinDay("")
	})
	cron.Every(1).Day().At("08:00").Do(func() {
		checkIn := NewCheckin(corpId)
		go checkIn.MonitorCheckinDay("")
	})

	//每月1号同步上月考勤、补卡审批、请假审批、报销审批
	cron.Every(1).Month(1).At("05:30").Do(func() {
		checkIn := NewCheckin(corpId)
		checkIn.SyncCheckinMonth("")
		lastMonth := time.Now().AddDate(0, -1, 0).Format("200601")

		approve := NewApproval(corpId)
		approve.Sync(lastMonth, model.ApprovalTypeCheckin)
		approve.Sync(lastMonth, model.ApprovalTypeVacation)
		approve.Sync(lastMonth, model.ApprovalTypeRefund)
		approve.Sync(lastMonth, model.ApprovalTypePayment)
	})

	// 1号计算工资信息
	cron.Every(1).Month(1, 2, 3, 4, 5, 6, 7, 8, 9).At("06:00").Do(func() {
		go staff.SyncStaffSalary(corpId, "")
		//go staff.SyncStaffSalary(1002, "")
	})

	//10号晚上8点发送工资单
	cron.Every(1).Month(10).At("20:00").Do(func() {
		go staff.SendStaffSalaryBill(corpId, time.Now().AddDate(0, -1, 0).Format("200601"))
		//go staff.SendStaffSalaryBill(1002, time.Now().AddDate(0, -1, 0).Format("200601"))
	})
}

func InitCorp1000(cron *gocron.Scheduler) {
	corpId := int64(1000)
	cron.Every(1).Day().At("09:00").Do(func() {
		go NewStaff().MontorWorkAge(corpId)
	})

	//同步每日考勤数据
	cron.Every(1).Day().At("05:00").Do(func() {
		checkIn := NewCheckin(corpId)
		go checkIn.SyncCheckinDay("")
	})
	cron.Every(1).Day().At("08:00").Do(func() {
		checkIn := NewCheckin(corpId)
		go checkIn.MonitorCheckinDay("")
	})

	//每月1号同步上月考勤、补卡审批、请假审批、报销审批
	cron.Every(1).Month(1).At("05:30").Do(func() {
		checkIn := NewCheckin(corpId)
		checkIn.SyncCheckinMonth("")
		lastMonth := time.Now().AddDate(0, -1, 0).Format("200601")

		approve := NewApproval(corpId)
		approve.Sync(lastMonth, model.ApprovalTypeCheckin)
		approve.Sync(lastMonth, model.ApprovalTypeVacation)
		approve.Sync(lastMonth, model.ApprovalTypeRefund)
		approve.Sync(lastMonth, model.ApprovalTypePayment)
	})

	// 1号计算工资信息
	cron.Every(1).Month(1, 2, 3, 4, 5, 6, 7, 8, 9).At("06:00").Do(func() {
		go NewStaff().SyncStaffSalary(corpId, "")
	})

	//10号晚上8点发送工资单
	cron.Every(1).Month(10).At("20:00").Do(func() {
		go NewStaff().SendStaffSalaryBill(corpId, time.Now().AddDate(0, -1, 0).Format("200601"))
	})

}