package mtpsapi

import "git.rosy.net.cn/baseapi/utils"

const (
	ShopStatusAuditRejected       = 10 // 审核驳回
	ShopStatusAuditPassed         = 20 // 审核通过
	ShopStatusAuditCreated        = 30 // 创建成功
	ShopStatusAuditOnline         = 40 // 上线可发单
	ShopStatusAuditUpdateRejected = 50 // 修改审核驳回
	ShopStatusAuditUpdatePassed   = 60 // 修改审核通过
)

const (
	ShopCategoryMarket            = 120    // 生活超市
	ShopCategoryMarketConvenience = 120001 // 便利店

	ShopCategoryFruit      = 150    // 生鲜果蔬
	ShopCategoryFruitFruit = 150001 // 果蔬
)

type BusinessHour struct {
	BeginTime string `json:"beginTime"`
	EndTime   string `json:"endTime"`
}

type ShopInfo struct {
	ShopID               string `json:"shop_id,omitempty"`
	ShopName             string `json:"shop_name,omitempty"`
	Category             int    `json:"category,omitempty"`
	SecondCategory       int    `json:"second_category,omitempty"`
	ContactName          string `json:"contact_name,omitempty"`
	ContactPhone         string `json:"contact_phone,omitempty"`
	ContactEmail         string `json:"contact_email,omitempty"`
	ShopAddress          string `json:"shop_address,omitempty"`
	ShopAddressDetail    string `json:"shop_address_detail,omitempty"`
	ShopLng              int    `json:"shop_lng,omitempty"`
	ShopLat              int    `json:"shop_lat,omitempty"`
	CoordinateType       int    `json:"coordinate_type"`
	DeliveryServiceCodes string `json:"delivery_service_codes,omitempty"`
	BusinessHours        string `json:"business_hours,omitempty"`

	// 以下为查询专有的
	City                int    `json:"city,omitempty"`
	DeliveryHours       string `json:"delivery_hours,omitempty"`
	Prebook             int    `json:"prebook,omitempty"`
	PrebookOutOfBizTime int    `json:"prebook_out_of_biz_time,omitempty"`
	PrebookPeriod       string `json:"prebook_period,omitempty"`
}

func (a *API) ShopCreate(shopInfo *ShopInfo) (status int, err error) {
	params := utils.Struct2MapByJson(shopInfo)
	result, err := a.AccessAPI("shop/create", params)
	if err == nil {
		status = int(utils.Interface2Int64WithDefault(result.Data["status"], 0))
	}
	return status, err
}

func (a *API) ShopUpdate(shopInfo *ShopInfo) (status int, err error) {
	params := utils.Struct2MapByJson(shopInfo)
	result, err := a.AccessAPI("shop/update", params)
	if err == nil {
		status = int(utils.Interface2Int64WithDefault(result.Data["status"], 0))
	}
	return status, err
}

func (a *API) ShopQuery(shopID string) (shopInfo *ShopInfo, err error) {
	result, err := a.AccessAPI("shop/query", map[string]interface{}{
		"shop_id": shopID,
	})
	if err == nil {
		err = utils.Map2StructByJson(result.Data, &shopInfo, false)
	}
	return shopInfo, err
}

func IsErrShopNotExist(err error) bool {
	if err != nil {
		if errExt, ok := err.(*utils.ErrorWithCode); ok && errExt.IntCode() == ResponseCodeShopNotExist {
			return true
		}
	}
	return false
}

func IsErrShopExist(err error) bool {
	if err != nil {
		return utils.IsErrMatch(err, utils.Int2Str(ResponseCodeInvalidParam), []string{
			"该合作方下已存在outerPoiId",
		})
	}
	return false
}

func (a *API) SimulateShopStatus(shopID string, status int) (err error) {
	params := map[string]interface{}{
		"shop_id": shopID,
		"status":  status,
	}
	_, err = a.AccessAPI("test/shop/status/callback", params)
	return err
}
