package cli

import (
	"context"
	"errors"
	douyinopenapi "gitea.youtukeji.com.cn/youtu/openapi-helper/douyin"
	"gitea.youtukeji.com.cn/youtu/youtu_grpc/app/auth_service/pkg/douyin/access-token"
	"github.com/silenceper/wechat/v2/cache"
)

type DouYinApi struct {
	api *douyinopenapi.DouYinOpenApi // 抖音openapi客户端
}

func (d *DouYinApi) GetAccessToken(_ context.Context) (string, error) {
	return d.api.GetAccessToken()
}

func (d *DouYinApi) Code2Session(_ context.Context, code, anonymousCode string) (session *Code2SessionResponse, err error) {
	var r douyinopenapi.Code2SessionResponse
	r, err = d.api.Code2Session(code, anonymousCode)
	if err != nil {
		return
	}
	if r.Errcode != 0 {
		err = errors.New(r.Errmsg)
		return
	}
	session = &Code2SessionResponse{
		OpenID:  r.Openid,
		UnionID: r.Unionid,
	}
	return
}

func NewDouYinApi(appId, appSecret string, cache cache.Cache) *DouYinApi {
	return &DouYinApi{
		api: douyinopenapi.NewDouYinOpenApi(douyinopenapi.DouYinOpenApiConfig{
			AppId:       appId,
			AppSecret:   appSecret,
			AccessToken: access_token.NewDefaultAccessToken(appId, appSecret, cache, false),
			Cache:       cache,
		}),
	}
}