package dto

import (
	"cold-delivery/app/admin/model"
	"cold-delivery/common/dto"
	common "cold-delivery/common/model"
)

type AddressGetPageReq struct {
	dto.Pagination `search:"-"`
	Name           string `form:"name" search:"-"`                                                   // 地址名称
	AddressType    string `form:"addressType" search:"type:exact;column:address_type;table:address"` //地址类型：sender-发货人 consignee-收货人
	DataType       string `form:"dataType" search:"-"`                                               // 我的my 全部all
	AddressOrder
}
type AddressOrder struct {
	CreatedAtOrder string `search:"type:order;column:created_at;table:address" form:"createdAtOrder" default:"desc"`
}

func (m *AddressGetPageReq) GetNeedSearch() interface{} {
	return *m
}

type AddressInsertReq struct {
	Id          int    `json:"id" comment:"编码" swaggerignore:"true"` // 编码
	Name        string `json:"name" vd:"len($)>0;msg:'姓名不能为空'"`      // 收货人名称
	Phone       string `json:"phone" vd:"len($)>0;msg:'手机号不能为空'"`    // 联系电话
	Address     string `json:"address" vd:"len($)>0;msg:'详细地址不能为空'"` // 详细地址
	IsDefault   bool   `json:"isDefault"`                            // 默认地址
	AddressType string `json:"addressType"`                          // 地址类型：sender-发货人 consignee-收货人

	common.ControlBy `swaggerignore:"true"`
	common.DeptBy    `swaggerignore:"true"`
}

func (s *AddressInsertReq) Generate(m *model.Address) {
	if s.Id != 0 {
		m.Id = s.Id
	}
	m.Name = s.Name
	m.Phone = s.Phone
	m.Address = s.Address
	m.IsDefault = s.IsDefault
	m.AddressType = s.AddressType
	if s.ControlBy.UpdateBy != 0 {
		m.UpdateBy = s.UpdateBy
	}
	if s.ControlBy.CreateBy != 0 {
		m.CreateBy = s.CreateBy
	}
	if s.DeptBy.DeptId != 0 {
		m.DeptId = s.DeptId
	}
}

func (s *AddressInsertReq) GetId() interface{} {
	return s.Id
}

type AddressUpdateReq struct {
	Id           int    `json:"id" comment:"编码"`                      // 编码
	Name         string `json:"name" vd:"len($)>0;msg:'姓名不能为空'"`      // 收货人名称
	Phone        string `json:"phone" vd:"len($)>0;msg:'手机号不能为空'"`    // 联系电话
	Address      string `json:"address" vd:"len($)>0;msg:'详细地址不能为空'"` // 详细地址
	IsDefault    bool   `json:"isDefault"`                            // 默认地址
	ProvinceId   string `json:"provinceId"`                           // 省Id
	ProvinceName string `json:"provinceName"`                         // 省中文名
	CityId       string `json:"cityId"`                               // 市Id
	CityName     string `json:"cityName"`                             // 市中文名
	RegionId     string `json:"regionId"`                             // 区Id
	RegionName   string `json:"regionName"`                           // 区中文名
	AddressType  string `json:"addressType"`                          // 地址类型：sender-发货人 consignee-收货人

	common.ControlBy `swaggerignore:"true"`
}

func (s *AddressUpdateReq) Generate(m *model.Address) {
	if s.Id != 0 {
		m.Id = s.Id
	}
	m.Name = s.Name
	m.Phone = s.Phone
	m.Address = s.Address
	m.IsDefault = s.IsDefault
	m.AddressType = s.AddressType
	if s.ControlBy.UpdateBy != 0 {
		m.UpdateBy = s.UpdateBy
	}
	if s.ControlBy.CreateBy != 0 {
		m.CreateBy = s.CreateBy
	}
}

func (s *AddressUpdateReq) GetId() interface{} {
	return s.Id
}

type AddressGetReq struct {
	Id int `uri:"id"`
}

func (s *AddressGetReq) GetId() interface{} {
	return s.Id
}

type AddressDeleteReq struct {
	Id               int `json:"id"`
	common.ControlBy `swaggerignore:"true"`
}

func (s *AddressDeleteReq) GetId() interface{} {
	return s.Id
}
