package forms

import (
	"errors"
	"time"
)

type AdminLogListReq struct {
	ListReq
	AdminId   int64   `json:"admin_id" form:"admin_id"`
	Path      string  `json:"path" form:"path"`
	Ip        string  `json:"ip" form:"ip"`
	Method    string  `json:"method" form:"method"`
	CreatedAt []int64 `json:"created_at" form:"created_at[]"`
	Time      []time.Time
}

func (req *AdminLogListReq) Check() error {
	if req.CreatedAt != nil && len(req.CreatedAt) != 2 {
		return errors.New("生成时间必须选择一个区间或者留空")
	}

	if len(req.CreatedAt) == 2 {
		if req.CreatedAt[0] > req.CreatedAt[1] {
			return errors.New("生成时间选择的区间值不合理")
		}
		// 默认是毫秒
		req.Time = append(req.Time, time.Unix(req.CreatedAt[0]/1000, 0))
		req.Time = append(req.Time, time.Unix(req.CreatedAt[1]/1000, 0))
	}

	return nil
}

type AdminLogListModel struct {
	ID           int64  `gorm:"column:id;primaryKey;autoIncrement:true" json:"id"`
	Environment  string `gorm:"column:environment;not null" json:"environment"` // 所在环境
	AdminID      int64  `gorm:"column:admin_id" json:"admin_id"`                // 管理员ID
	AdminName    string ` json:"adminName"`
	AppID        string `gorm:"column:app_id" json:"app_id"`                  // 所属应用
	UserAgent    string `gorm:"column:user_agent;not null" json:"user_agent"` // 访问代理
	Method       string `gorm:"column:method;not null" json:"method"`         // 请求方式
	URL          string `gorm:"column:url;not null" json:"url"`               // 访问地址
	Host         string `gorm:"column:host;not null" json:"host"`             // 服务域
	Path         string `gorm:"column:path;not null" json:"path"`             // 访问路径
	GetData      string `gorm:"column:get_data" json:"get_data"`
	PostData     string `gorm:"column:post_data" json:"post_data"`
	HeaderData   string `gorm:"column:header_data" json:"header_data"`
	AccessIP     string `gorm:"column:access_ip;not null" json:"access_ip"`     // 访问IP
	StatusCode   int32  `gorm:"column:status_code;not null" json:"status_code"` // 响应状态码
	ErrorMessage string `gorm:"column:error_message" json:"error_message"`      // 错误消息
	//Data         string    `gorm:"column:data;not null" json:"data"`               // 响应数据
	Latency   int32     `gorm:"column:latency" json:"latency"`                // 耗时
	Timestamp time.Time `gorm:"column:timestamp;not null" json:"timestamp"`   // 请求时间
	CreatedAt time.Time `gorm:"column:created_at;not null" json:"created_at"` // 创建时间
	Remark    string    `gorm:"column:remark;not null" json:"remark"`
}

type AdminLogViewReq struct {
	Id int64 `json:"id" form:"id"`
}

func (req *AdminLogViewReq) Check() error {
	if req.Id <= 0 {
		return errors.New("记录ID不能为空")
	}

	return nil
}

type AdminLogViewModel struct {
	ID           int64     `gorm:"column:id;primaryKey;autoIncrement:true" json:"id"`
	Environment  string    `gorm:"column:environment;not null" json:"environment"` // 所在环境
	AdminID      int64     `gorm:"column:admin_id" json:"admin_id"`                // 管理员ID
	AdminName    string    ` json:"adminName"`
	AppID        string    `gorm:"column:app_id" json:"app_id"`                  // 所属应用
	UserAgent    string    `gorm:"column:user_agent;not null" json:"user_agent"` // 访问代理
	Method       string    `gorm:"column:method;not null" json:"method"`         // 请求方式
	URL          string    `gorm:"column:url;not null" json:"url"`               // 访问地址
	Host         string    `gorm:"column:host;not null" json:"host"`             // 服务域
	Path         string    `gorm:"column:path;not null" json:"path"`             // 访问路径
	GetData      string    `gorm:"column:get_data" json:"get_data"`
	PostData     string    `gorm:"column:post_data" json:"post_data"`
	HeaderData   string    `gorm:"column:header_data" json:"header_data"`
	AccessIP     string    `gorm:"column:access_ip;not null" json:"access_ip"`     // 访问IP
	StatusCode   int32     `gorm:"column:status_code;not null" json:"status_code"` // 响应状态码
	ErrorMessage string    `gorm:"column:error_message" json:"error_message"`      // 错误消息
	Data         string    `gorm:"column:data;not null" json:"data"`               // 响应数据
	Latency      int32     `gorm:"column:latency" json:"latency"`                  // 耗时
	Timestamp    time.Time `gorm:"column:timestamp;not null" json:"timestamp"`     // 请求时间
	CreatedAt    time.Time `gorm:"column:created_at;not null" json:"created_at"`   // 创建时间
	Remark       string    `gorm:"column:remark;not null" json:"remark"`
}
