package dto

import (
	"time"
)

type SearchClamWithPage struct {
	PageInfo
	Info    string `json:"info"`
	OrderBy string `json:"orderBy" validate:"required,oneof=name status createdAt"`
	Order   string `json:"order" validate:"required,oneof=null ascending descending"`
}

type ClamBaseInfo struct {
	Version  string `json:"version"`
	IsActive bool   `json:"isActive"`
	IsExist  bool   `json:"isExist"`

	FreshVersion  string `json:"freshVersion"`
	FreshIsActive bool   `json:"freshIsActive"`
	FreshIsExist  bool   `json:"freshIsExist"`
}

type ClamInfo struct {
	ID        uint      `json:"id"`
	CreatedAt time.Time `json:"createdAt"`

	Name             string `json:"name"`
	Status           string `json:"status"`
	Path             string `json:"path"`
	InfectedStrategy string `json:"infectedStrategy"`
	InfectedDir      string `json:"infectedDir"`
	LastRecordStatus string `json:"lastRecordStatus"`
	LastRecordTime   string `json:"lastRecordTime"`
	Spec             string `json:"spec"`
	Timeout          uint   `json:"timeout"`
	Description      string `json:"description"`
	AlertCount       uint   `json:"alertCount"`
	AlertMethod      string `json:"alertMethod"`
}

type ClamLogSearch struct {
	PageInfo

	ClamID    uint      `json:"clamID"`
	Status    string    `json:"status"`
	StartTime time.Time `json:"startTime"`
	EndTime   time.Time `json:"endTime"`
}

type ClamLogReq struct {
	Tail       string `json:"tail"`
	ClamName   string `json:"clamName"`
	RecordName string `json:"recordName"`
}

type ClamFileReq struct {
	Tail string `json:"tail"`
	Name string `json:"name" validate:"required"`
}

type ClamRecord struct {
	ID            uint      `json:"id"`
	TaskID        string    `json:"taskID"`
	StartTime     time.Time `json:"startTime"`
	ScanTime      string    `json:"scanTime"`
	InfectedFiles string    `json:"infectedFiles"`
	TotalError    string    `json:"totalError"`

	Status  string `json:"status"`
	Message string `json:"message"`
}

type ClamCreate struct {
	Name             string `json:"name"`
	Status           string `json:"status"`
	Path             string `json:"path"`
	InfectedStrategy string `json:"infectedStrategy"`
	InfectedDir      string `json:"infectedDir"`
	Spec             string `json:"spec"`
	Timeout          uint   `json:"timeout"`
	Description      string `json:"description"`
	AlertCount       uint   `json:"alertCount"`
	AlertTitle       string `json:"alertTitle"`
	AlertMethod      string `json:"alertMethod"`
}

type ClamUpdate struct {
	ID uint `json:"id"`

	Name             string `json:"name"`
	Path             string `json:"path"`
	InfectedStrategy string `json:"infectedStrategy"`
	InfectedDir      string `json:"infectedDir"`
	Spec             string `json:"spec"`
	Timeout          uint   `json:"timeout"`
	Description      string `json:"description"`
	AlertCount       uint   `json:"alertCount"`
	AlertTitle       string `json:"alertTitle"`
	AlertMethod      string `json:"alertMethod"`
}

type ClamUpdateStatus struct {
	ID     uint   `json:"id"`
	Status string `json:"status"`
}

type ClamDelete struct {
	RemoveInfected bool   `json:"removeInfected"`
	Ids            []uint `json:"ids" validate:"required"`
}
