// Code scaffolded by goctl. Safe to edit.
// goctl 1.9.2

package verification_admin

import (
	"context"
	"juwan-backend/app/user_verifications/rpc/pb"
	"juwan-backend/common/utils/contextj"
	"time"

	"juwan-backend/app/users/api/internal/svc"
	"juwan-backend/app/users/api/internal/types"

	"github.com/jinzhu/copier"
	"github.com/zeromicro/go-zero/core/logx"
)

type GetVerificationsLogic struct {
	logx.Logger
	ctx    context.Context
	svcCtx *svc.ServiceContext
}

// 管理员获取认证申请列表 (分页)
func NewGetVerificationsLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetVerificationsLogic {
	return &GetVerificationsLogic{
		Logger: logx.WithContext(ctx),
		ctx:    ctx,
		svcCtx: svcCtx,
	}
}

func (l *GetVerificationsLogic) GetVerifications(req *types.GetPendingListReq) (resp *types.GetPendingListResp, err error) {
	_, err = contextj.AdminIdFrom(l.ctx)
	if err != nil {
		return nil, err
	}
	offset := req.Offset
	if offset < 0 {
		offset = 0
	}
	limit := req.Limit
	if limit <= 0 {
		limit = 20
	}
	verifications, err := l.svcCtx.UserVerificationsRpc.SearchUserVerifications(l.ctx, &pb.SearchUserVerificationsReq{
		Offset: offset,
		Limit:  limit,
		Role:   req.Role,
		Status: req.Status,
	})
	if err != nil {
		return nil, err
	}

	searchResults := make([]types.VerificationItem, 0, len(verifications.UserVerifications))
	for _, v := range verifications.UserVerifications {
		temp := types.VerificationItem{}
		err = copier.Copy(&temp, v)
		if err != nil {
			logx.Errorf("copy verification item err: %s", err.Error())
			continue
		}
		temp.CreatedAt = time.Unix(v.CreatedAt, 0).Format(time.DateTime)
		temp.ReviewedAt = time.Unix(v.ReviewedAt, 0).Format(time.DateTime)
		searchResults = append(searchResults, temp)
	}
	resp = &types.GetPendingListResp{
		List:  searchResults,
		Total: 0,
	}
	return
}
