package logic

import (
	"errors"
	"log"
	"server/model/system"
	"server/plugin/spider"
)

type SpiderLogic struct {
}

var SL *SpiderLogic

// BatchCollect 批量采集
func (sl *SpiderLogic) BatchCollect(time int, ids []string) {
	go spider.BatchCollect(time, ids...)
}

// StartCollect 执行对指定站点的采集任务
func (sl *SpiderLogic) StartCollect(id string, h int) error {
	// 先判断采集站是否存在于系统数据中
	if fs := system.FindCollectSourceById(id); fs == nil {
		return errors.New("采集任务开启失败采集站信息不存在")
	}
	// 存在则开启协程执行采集方法
	go func() {
		err := spider.HandleCollect(id, h)
		if err != nil {
			log.Printf("资源站[%s]采集任务执行失败: %s", id, err)
		}
	}()
	return nil
}

// AutoCollect 自动采集
func (sl *SpiderLogic) AutoCollect(time int) {
	go spider.AutoCollect(time)
}

// ClearFilms 删除采集的数据信息
func (sl *SpiderLogic) ClearFilms() {
	go spider.ClearSpider()
}

// ZeroCollect 数据清除从零开始采集
func (sl *SpiderLogic) ZeroCollect(time int) {
	go spider.StarZero(time)
}

// SyncCollect 同步采集
func (sl *SpiderLogic) SyncCollect(ids string) {
	go spider.CollectSingleFilm(ids)
}

// FilmClassCollect 影视分类采集, 直接覆盖当前分类数据
func (sl *SpiderLogic) FilmClassCollect() error {
	l := system.GetCollectSourceListByGrade(system.MasterCollect)
	if l == nil {
		return errors.New("未获取到主采集站信息")
	}
	// 获取主站点信息, 只取第一条有效
	for _, fs := range l {
		if fs.State {
			go spider.CollectCategory(&fs)
			return nil
		}
	}
	return errors.New("未获取到已启用的主采集站信息")
}
