package dto

import "time"

type VersionResponse struct {
	ID          uint      `json:"ID"`
	CreatedAt   time.Time `json:"CreatedAt"`
	UpdatedAt   time.Time `json:"UpdatedAt"`
	DeletedAt   any       `json:"-"`
	VersionName *string   `json:"versionName"`
	VersionCode *string   `json:"versionCode"`
	Description *string   `json:"description"`
	VersionData *string   `json:"versionData"`
}

type VersionSearchRequest struct {
	CreatedAtRange []time.Time `json:"createdAtRange" form:"createdAtRange[]"`
	VersionName    *string     `json:"versionName" form:"versionName"`
	VersionCode    *string     `json:"versionCode" form:"versionCode"`
	Page           int         `json:"page" form:"page"`
	PageSize       int         `json:"pageSize" form:"pageSize"`
}

type VersionMenuMetaRequest struct {
	ActiveName     string `json:"activeName"`
	KeepAlive      bool   `json:"keepAlive"`
	DefaultMenu    bool   `json:"defaultMenu"`
	Title          string `json:"title"`
	Icon           string `json:"icon"`
	CloseTab       bool   `json:"closeTab"`
	TransitionType string `json:"transitionType"`
}
type VersionMenuButtonRequest struct {
	Name        string `json:"name"`
	Description string `json:"desc"`
}
type VersionMenuParameterRequest struct {
	Type  string `json:"type"`
	Key   string `json:"key"`
	Value string `json:"value"`
}
type VersionMenuRequest struct {
	Path        string                        `json:"path"`
	Name        string                        `json:"name"`
	Hidden      bool                          `json:"hidden"`
	Component   string                        `json:"component"`
	Sort        int                           `json:"sort"`
	Meta        VersionMenuMetaRequest        `json:"meta"`
	MenuButtons []VersionMenuButtonRequest    `json:"menuBtn"`
	Parameters  []VersionMenuParameterRequest `json:"parameters"`
	Children    []VersionMenuRequest          `json:"children"`
}
type VersionAPIRequest struct {
	Path        string `json:"path"`
	Description string `json:"description"`
	APIGroup    string `json:"apiGroup"`
	Method      string `json:"method"`
}
type VersionDictionaryDetailRequest struct {
	Label    string `json:"label"`
	Value    string `json:"value"`
	Extend   string `json:"extend"`
	Status   *bool  `json:"status"`
	Sort     int    `json:"sort"`
	ParentID *uint  `json:"parentID"`
	Level    int    `json:"level"`
	Path     string `json:"path"`
}
type VersionDictionaryRequest struct {
	Name        string                           `json:"name"`
	Type        string                           `json:"type"`
	Status      *bool                            `json:"status"`
	Description string                           `json:"desc"`
	Details     []VersionDictionaryDetailRequest `json:"sysDictionaryDetails"`
}
type ImportVersionRequest struct {
	Version struct {
		Name        string `json:"name" binding:"required"`
		Code        string `json:"code" binding:"required"`
		Description string `json:"description"`
		ExportTime  string `json:"exportTime"`
	} `json:"version" binding:"required"`
	Menus        []VersionMenuRequest       `json:"menus"`
	APIs         []VersionAPIRequest        `json:"apis"`
	Dictionaries []VersionDictionaryRequest `json:"dictionaries"`
}
type ExportVersionRequest struct {
	VersionName string `json:"versionName" binding:"required"`
	VersionCode string `json:"versionCode" binding:"required"`
	Description string `json:"description"`
	MenuIDs     []uint `json:"menuIds"`
	APIIDs      []uint `json:"apiIds"`
	DictIDs     []uint `json:"dictIds"`
}
