package tokens

import (
	"amocrm/pkg/amoClient"
	"context"
	"go.uber.org/zap"
	"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/dal"
	"time"
)

type Deps struct {
	AmoClient *amoClient.Amo
	Repo      *dal.AmoDal
	Logger    *zap.Logger
}

type Token struct {
	amoClient *amoClient.Amo
	repo      *dal.AmoDal
	logger    *zap.Logger
}

func NewRefreshWC(deps Deps) *Token {
	return &Token{
		amoClient: deps.AmoClient,
		repo:      deps.Repo,
		logger:    deps.Logger,
	}
}

func (wc *Token) Start(ctx context.Context) {
	ticker := time.NewTicker(5 * time.Minute)
	defer ticker.Stop()

	for {
		select {
		case <-ticker.C:
			wc.processTasks(ctx)

		case <-ctx.Done():
			return
		}
	}
}

func (wc *Token) processTasks(ctx context.Context) {
	//tokens, err := wc.repo.AmoRepo.CheckExpired(ctx)
	//if err != nil {
	//	wc.logger.Error("error fetch expired tokens in mongo", zap.Error(err))
	//	return
	//}
	//for _, token := range tokens {
	//	req := models.UpdateWebHookReq{
	//		GrantType:    "refresh_token",
	//		RefreshToken: token.RefreshToken,
	//	}
	//	newTokens, err := wc.amoClient.CreateWebHook(&req)
	//	if err != nil {
	//		wc.logger.Error("error create webhook for update tokens", zap.Error(err))
	//		continue
	//	}
	//	err = wc.repo.AmoRepo.WebhookUpdate(ctx, model.Token{
	//		AccountID:    token.AccountID,
	//		RefreshToken: newTokens.RefreshToken,
	//		AccessToken:  newTokens.AccessToken,
	//		Expiration:   time.Now().Unix() + newTokens.ExpiresIn,
	//		CreatedAt:    time.Now().Unix(),
	//	})
	//	if err != nil {
	//		wc.logger.Error("error update new tokens in mongo", zap.Error(err))
	//		continue
	//	}
	//}
}

func (wc *Token) Stop(_ context.Context) error {
	return nil
}
