syntax = "v1"

info (
	title: // TODO: add title
	desc: // TODO: add description
	author: ""
	email: ""
)

import "basic.api"

service home-user-auth {

	// @handler UserRegisterHandler
	// post /api/user/register(RequestUserRegister) returns (response);

	@handler UserLoginHandler
	post /api/user/login(RequestUserLogin) returns (response);

	@handler AcceptCookieHandler
	post /api/user/accept-cookie(request) returns (response);

	@handler UserFontsHandler
	get /api/user/fonts(request) returns (response);

	@handler UserGetTypeHandler
	get /api/user/get-type(request) returns (response);

	@handler UserSaveBasicInfoHandler
	post /api/user/basic-info(RequestBasicInfoForm) returns (response);

	@handler UserStatusConfigHandler
	get /api/user/status-config(request) returns (response);

	@handler UserBasicInfoHandler
	get /api/user/basic-info(request) returns (response);

	@handler UserAddressListHandler
	get /api/user/address-list(request) returns (response);

	@handler UserAddAddressHandler
	post /api/user/add-address(RequestAddAddress) returns (response);

	@handler UserContactServiceHandler
	post /api/user/contact-service (RequestContactService) returns (response);

	// @handler UserOderListHandler
	// get /api/user/order-list(RequestOrderId) returns (response);

	@handler UserOderDeleteHandler
	post /api/user/order-delete(RequestOrderId) returns (response);

	@handler UserGoogleLoginHandler
	get /api/user/oauth2/login/google(RequestGoogleLogin) returns (response);

	@handler UserEmailRegisterHandler
	get /api/user/oauth2/login/register(RequestEmailRegister) returns (response);

	//订单列表
	@handler UserOrderListHandler
	get /api/user/order-list (UserOrderListReq) returns (response);

	//删除订单
	@handler UserOrderDeleteHandler
	get /api/user/order-delete (UserOrderDeleteReq) returns (response);

	//取消订单
	@handler UserOrderCancelHandler
	get /api/user/order-cancel (UserOrderCancelReq) returns (response);

}

type (
	UserOrderDeleteReq {
		ID int64 `form:"id"` //订单id
	}
	UserOrderDeleteRes {
	}
)

//取消订单
type (
	UserOrderCancelReq {
		ID             int64  `form:"id"`                     //订单id
		RefundReasonId int64  `form:"refund_reason_id"`       //退款配置id
		RefundReason   string `form:"refund_reason,optional"` //退款原因
	}
	UserOrderCancelRsp {
	}
)

// 获取订单列表
type (
	UserOrderListReq {
		Page     int64 `form:"page"`      // 分页
		PageSize int64 `form:"page_size"` // 每页数量
		Status   int64 `form:"status"`    // 状态筛选
		Time     int64 `form:"time"`      // 时间筛选
		Total    int64 `form:"total"`     // 总数
		Size     int64 `form:"size"`      // 图片尺寸
	}

	UserOrderListRsp {
		Items []Items `json:"items"`
		Meta  Meta    `json:"_meta"`
	}
)

type Items {
	ID              int64        `json:"id"`
	Sn              string       `json:"sn"`
	UserID          int64        `json:"user_id"`
	TotalAmount     int64        `json:"total_amount"`
	Ctime           string       `json:"ctime"`
	Status          int64        `json:"status"`
	DeliveryMethod  int64        `json:"delivery_method"`
	TsTime          string       `json:"ts_time"`
	IsPayCompleted  int64        `json:"is_pay_completed"`
	DeliverSn       string       `json:"deliver_sn"`
	PcsBox          int64        `json:"pcs_box"`
	Pcs             int64        `json:"pcs"`
	SurplusAt       int64        `json:"surplus_at"`
	LogisticsStatus int64        `json:"logistics_status"`
	StatusTimes     []StatusTime `json:"status_times"`
	Deposit         int64        `json:"deposit"`
	Remaining       int64        `json:"remaining"`
	ProductList     []Product    `json:"productList"`
	IsStop          int64        `json:"is_stop"`
}

type StatusTime {
	Key  int    `json:"key"`
	Time string `json:"time"`
}

type Product {
	Cover                 string `json:"cover"`
	Fitting               string `json:"fitting"`
	OptionPrice           int64  `json:"option_price"`
	OrderDetailTemplateId int64  `json:"order_detail_template_id"`
	OrderId               int64  `json:"order_id"`
	Pcs                   int64  `json:"pcs"`
	PcsBox                int64  `json:"pcs_box"`
	Price                 int64  `json:"price"`
	ProductId             int64  `json:"product_id"`
	Size                  string `json:"size"`
	Title                 string `json:"title"`
	IsStop                int64  `json:"is_stop"`
}

type RequestGoogleLogin {
	Code     string `form:"code"`
	Scope    string `form:"scope"`
	AuthUser string `form:"authuser"`
	Prompt   string `form:"prompt"`
	Email    string `form:"email,optional"`
}

type RequestEmailRegister {
	Email         string `json:"email"`
	RegisterToken string `json:"register_token"`
}

type RequestContactService {
	Type       string `json:"type"`            // 类型
	RelationID int64  `json:"relation_id"`     // 关系id
	Name       string `json:"name"`            // 名字
	Email      string `json:"email"`           // email
	Phone      string `json:"phone,optional"`  // phone
	Remark     string `json:"remark,optional"` // remark标记
}

type RequestBasicInfoForm {
	FirstName            string `json:"first_name"`             // FirstName
	LastName             string `json:"last_name"`              // LastName
	Company              string `json:"company"`                // 公司名称
	Mobile               string `json:"mobile"`                 // 手机号码
	Email                string `json:"email"`                  // 邮箱
	Type                 int64  `json:"type"`                   // 1正常 0不正常
	IsOrderStatusEmail   int64  `json:"is_order_status_email"`  // 订单状态改变时是否接收邮件
	IsEmailAdvertisement int64  `json:"is_email_advertisement"` // 是否接收邮件广告
	IsOrderStatusPhone   int64  `json:"is_order_status_phone"`  // 订单状态改变是是否接收电话
	IsPhoneAdvertisement int64  `json:"is_phone_advertisement"` // 是否接收短信广告
	IsOpenRender         int64  `json:"is_open_render"`         // 是否打开个性化渲染(1:开启,0:关闭)
	IsLowRendering       int64  `json:"is_low_rendering"`       // 是否开启低渲染模型渲染
	IsRemoveBg           int64  `json:"is_remove_bg"`           // 用户上传logo是否去除背景

	// NewPassword string `form:"new_password,optional" db:"new_password"` // new_password 如果存在新密码
}

// UserAddAddressHandler 用户登录请求结构
type RequestUserLogin {
	Email    string `json:"email"`
	Password string `json:"password"`
}

// RequestAddAddress 增加地址结构
type RequestAddAddress {
	Id        int64  `json:"id"`         // address_id 地址id
	IsDefault int64  `json:"is_default"` //是否默认
	Name      string `json:"name"`       //收货人
	FirstName string `json:"first_name"` //first_name
	LastName  string `json:"last_name"`  //last_name
	Mobile    string `json:"mobile"`     //手机
	ZipCode   string `json:"zip_code"`   //邮编
	Street    string `json:"street"`     //街道
	Suite     string `json:"suite"`      //房号
	City      string `json:"city"`       //城市
	State     string `json:"state"`      //州
}

// RequestOrderId 传入订单id的结构
type RequestOrderId {
	OrderId        int64  `json:"id"`               //订单id
	RefundReasonId int64  `json:"refund_reason_id"` //取消原因id
	RefundReason   string `json:"refund_reason"`    //取消原因
}

// UserLoginHandler 用户登录请求结构
type DataUserLogin {
	Token string `json:"token"` // 登录jwt token
}

// DataGuest 游客获取toekn请求结构
type DataGuest {
	Token string `json:"token"` // 登录jwt token
}

// UserBasicInfoHandler 返回data结构
type DataUserBasicInfo {
	Type                 int64 `json:"type"`                   // 1普通餐厅 2连锁餐厅
	IsOrderStatusEmail   int64 `json:"is_order_status_email"`  // 订单状态改变时是否接收邮件
	IsEmailAdvertisement int64 `json:"is_email_advertisement"` // 是否接收邮件广告
	IsOrderStatusPhone   int64 `json:"is_order_status_phone"`  // 订单状态改变是是否接收电话
	IsPhoneAdvertisement int64 `json:"is_phone_advertisement"` // 是否接收短信广告
	IsOpenRender         int64 `json:"is_open_render"`         // 是否打开个性化渲染(1:开启,0:关闭)
	IsThousandFace       int64 `json:"is_thousand_face"`       // 是否已经存在千人千面(1:存在,0:不存在)
	IsLowRendering       int64 `json:"is_low_rendering"`       // 是否开启低渲染模型渲染
	IsRemoveBg           int64 `json:"is_remove_bg"`           // 用户上传logo是否去除背景
}

// /user/get-type reponse.data 结构
type DataGetType {
	Id   int64  `json:"key"`  // ID
	Name string `json:"name"` // 餐厅名字
}

// KeyName 普通的key name 对象结构. eg: /user/status-config 用在返回值
type KeyName {
	Key  int    `json:"key"`
	Name string `json:"name"`
}

// KeyNameButton 普通的key name button 对象结构 eg: /user/status-config 用在返回值
type KeyNameButton {
	Key    int      `json:"key"`
	Name   string   `json:"name"`
	Button []string `json:"button"`
}

// DataStatusConfig /user/status-config 返回值data结构
type DataStatusConfig {
	SearchList               []KeyName       `json:"search_list"`                //搜索下拉列表
	OrderStatus              []KeyNameButton `json:"order_status"`               //直邮单状态
	InventoryStatus          []KeyNameButton `json:"Inventory_status"`           //云仓单状态
	OrderLogisticsStatus     []KeyName       `json:"order_logistics_status"`     //订单物流状态
	InventoryLogisticsStatus []KeyName       `json:"Inventory_logistics_status"` //订单物流状态
	Time                     []KeyName       `json:"time"`                       //返回订单时间筛选项
	RefundReason             []KeyName       `json:"refund_reason"`              //退款原因说明项
	LogisticsStatus          []KeyNameButton `json:"logistics_status"`           //物流状态筛选项
}

// DataAddressList /user/address-list 返回值
type DataAddressList {
	Id        int64  `json:"id"`
	UserId    int64  `json:"user_id"`    // 用户ID
	Name      string `json:"name"`       // 地址名称
	FirstName string `json:"first_name"` // FirstName
	LastName  string `json:"last_name"`  // LastName
	Mobile    string `json:"mobile"`     // 手机号码
	Street    string `json:"street"`     // 街道
	Suite     string `json:"suite"`      // 房号
	City      string `json:"city"`       // 城市
	State     string `json:"state"`      // 州名
	// Country   string `json:"country"`    // 国家
	ZipCode string `json:"zip_code"` // 邮编
	// Status    int64  `json:"status"`     // 1正常 0异常
	IsDefault int64 `json:"is_default"` // 1默认地址,0非默认地址
}