package cs

import (
	"errors"
	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk"
	"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
)

const (
	VERSION = "2025-06-10"
)

var HOST = requests.Host{
	Default: "cs",
}

type Client struct {
	sdk.Client
}

func NewClient() (client *Client, err error) {
	client = new(Client)
	err = client.Init()
	return
}

func (client *Client) GetFaq(req *GetFaqRequest) (resp *GetFaqResponse, err error) {
	resp = CreateGetFaqResponse()
	err = client.DoAction(req, resp)
	return
}

func (client *Client) GetUserInfo(req *GetUserInfoRequest) (resp *GetUserInfoResponse, err error) {
	resp = CreateGetUserInfoResponse()
	err = client.DoAction(req, resp)
	return
}

func (client *Client) GetCsUserRoleList(req *GetUserRoleListRequest) (resp *GetUserRoleListResponse, err error) {
	resp = CreateGetUserRoleListResponse()
	err = client.DoAction(req, resp)
	return
}

func (client *Client) GetUserServerList(req *GetUserServerListRequest) (resp *GetUserServerListResponse, err error) {
	resp = CreateGetUserServerListResponse()
	err = client.DoAction(req, resp)
	return
}

func (client *Client) SendSmsCode(req *SendSmsRequest) (resp *SendSmsResponse, err error) {
	resp = CreateSendSmsResponse()
	err = client.DoAction(req, resp)
	return
}

func (client *Client) Upload(req *UploadRequest) (resp *UploadResponse, err error) {
	// check file stream
	if req.FileStream == nil {
		err = errors.New("stream is empty")
		return
	}
	// 必须设置content
	req.SetContent(req.FileStream)
	resp = CreateUploadResponse()
	err = client.DoAction(req, resp)
	return
}
func (client *Client) GetOrderTemplateDetail(req *OrderTemplateDetailReq) (resp *OrderTemplateDetailResp, err error) {
	resp = CreateOrderTemplateDetailResp()
	err = client.DoAction(req, resp)
	return
}

func (client *Client) GetOrderFurtherPart(req *GetOrderFurtherPartRequest) (resp *GetOrderFurtherPartResponse, err error) {
	resp = CreateGetOrderFurtherPartResponse()
	err = client.DoAction(req, resp)
	return
}

func (client *Client) OrderUrgent(req *OrderUrgentRequest) (resp *OrderUrgentResponse, err error) {
	resp = CreateOrderUrgentResponse()
	err = client.DoAction(req, resp)
	return
}

func (client *Client) OrderUpdateHandle(req *OrderUpdateHandleRequest) (resp *OrderUpdateHandleResponse, err error) {
	resp = CreateOrderUpdateHandleResponse()
	err = client.DoAction(req, resp)
	return
}
func (client *Client) OrderAppraise(req *OrderAppraiseRequest) (resp *OrderAppraiseResponse, err error) {
	resp = CreateOrderAppraiseResponse()
	err = client.DoAction(req, resp)
	return
}
func (client *Client) OrderRestart(req *OrderRestartRequest) (resp *OrderRestartResponse, err error) {
	resp = CreateOrderRestartResponse()
	err = client.DoAction(req, resp)
	return
}
func (client *Client) OrderSubmit(req *OrderSubmitRequest) (resp *OrderSubmitResponse, err error) {
	resp = CreateOrderSubmitResponse()
	err = client.DoAction(req, resp)
	return
}

func (client *Client) OrderFurtherPart(req *OrderFurtherPartRequest) (resp *OrderFurtherPartResponse, err error) {
	resp = CreateOrderFurtherPartResponse()
	err = client.DoAction(req, resp)
	return
}
func (client *Client) OrderRecordList(req *GetWorkOrderRecordListRequest) (resp *GetWorkOrderRecordListResponse, err error) {
	resp = CreateGetWorkOrderRecordListResponse()
	err = client.DoAction(req, resp)
	return
}
func (client *Client) OrderRecordDetail(req *GetWorkOrderRecordDetailReq) (resp *GetWorkOrderRecordDetailResp, err error) {
	resp = CreateGetWorkOrderRecordDetailResp()
	err = client.DoAction(req, resp)
	return
}

func (client *Client) GetFaqDetail(req *GetFaqDetailRequest) (resp *GetFaqDetailResponse, err error) {
	resp = CreateGetFaqDetailResponse()
	err = client.DoAction(req, resp)
	return
}