package admin

import (
	"Gwen/model"
	"encoding/json"
)

type AddressBookForm struct {
	RowId            uint     `json:"row_id"`
	Id               string   `json:"id" validate:"required"`
	Username         string   `json:"username" `
	Password         string   `json:"password" `
	Hostname         string   `json:"hostname" `
	Alias            string   `json:"alias" `
	Platform         string   `json:"platform" `
	Tags             []string `json:"tags"`
	Hash             string   `json:"hash"`
	UserId           uint     `json:"user_id"`
	UserIds          []uint   `json:"user_ids"`
	ForceAlwaysRelay bool     `json:"forceAlwaysRelay"`
	RdpPort          string   `json:"rdpPort"`
	RdpUsername      string   `json:"rdpUsername"`
	Online           bool     `json:"online"`
	LoginName        string   `json:"loginName" `
	SameServer       bool     `json:"sameServer"`
	CollectionId     uint     `json:"collection_id"`
}

func (a AddressBookForm) ToAddressBook() *model.AddressBook {
	//tags转换
	tags, _ := json.Marshal(a.Tags)

	return &model.AddressBook{
		RowId:            a.RowId,
		Id:               a.Id,
		Username:         a.Username,
		Password:         a.Password,
		Hostname:         a.Hostname,
		Alias:            a.Alias,
		Platform:         a.Platform,
		Tags:             tags,
		Hash:             a.Hash,
		UserId:           a.UserId,
		ForceAlwaysRelay: a.ForceAlwaysRelay,
		RdpPort:          a.RdpPort,
		RdpUsername:      a.RdpUsername,
		Online:           a.Online,
		LoginName:        a.LoginName,
		SameServer:       a.SameServer,
		CollectionId:     a.CollectionId,
	}

}
func (a AddressBookForm) ToAddressBooks() []*model.AddressBook {
	//tags转换
	tags, _ := json.Marshal(a.Tags)

	abs := make([]*model.AddressBook, 0, len(a.UserIds))
	for _, userId := range a.UserIds {
		abs = append(abs, &model.AddressBook{
			RowId:            a.RowId,
			Id:               a.Id,
			Username:         a.Username,
			Password:         a.Password,
			Hostname:         a.Hostname,
			Alias:            a.Alias,
			Platform:         a.Platform,
			Tags:             tags,
			Hash:             a.Hash,
			UserId:           userId,
			ForceAlwaysRelay: a.ForceAlwaysRelay,
			RdpPort:          a.RdpPort,
			RdpUsername:      a.RdpUsername,
			Online:           a.Online,
			LoginName:        a.LoginName,
			SameServer:       a.SameServer,
			CollectionId:     a.CollectionId,
		})
	}
	return abs
}

type AddressBookQuery struct {
	UserId       int    `form:"user_id"`
	CollectionId *int   `form:"collection_id"`
	IsMy         int    `form:"is_my"`
	Username     string `form:"username"`
	Hostname     string `form:"hostname"`
	Id           string `form:"id"`
	PageQuery
}

type ShareByWebClientForm struct {
	Id           string `json:"id" validate:"required"`
	PasswordType string `json:"password_type" validate:"required,oneof=once fixed"` //只能是once,fixed
	Password     string `json:"password" validate:"required"`
	Expire       int64  `json:"expire"`
}

func (sbwcf ShareByWebClientForm) ToShareRecord() *model.ShareRecord {
	return &model.ShareRecord{
		UserId:       0,
		PeerId:       sbwcf.Id,
		PasswordType: sbwcf.PasswordType,
		Password:     sbwcf.Password,
		Expire:       sbwcf.Expire,
	}
}

type AddressBookCollectionQuery struct {
	UserId int `form:"user_id"`
	IsMy   int `form:"is_my"`
	PageQuery
}

type AddressBookCollectionSimpleListQuery struct {
	UserIds []uint `form:"user_ids"`
}
type AddressBookCollectionRuleQuery struct {
	UserId       int `form:"user_id"`
	CollectionId int `form:"collection_id"`
	IsMy         int `form:"is_my"`
	PageQuery
}
