package backend

import (
	"context"

	firebase "firebase.google.com/go/v4"
	"firebase.google.com/go/v4/auth"
	"google.golang.org/api/option"
)

type Client struct{ *auth.Client }

func NewClient(c *Config) (*Client, error) {
	var err error

	client := new(Client)
	ctx := context.Background()
	opt := option.WithCredentialsFile(c.FirebaseKey)

	app, err := firebase.NewApp(ctx, nil, opt)
	if err != nil {
		return nil, err
	}

	client.Client, err = app.Auth(ctx)
	if err != nil {
		return nil, err
	}

	return client, nil
}

func (c *Client) Verify(idToken string) (*auth.Token, error) {
	ctx := context.Background()

	token, err := c.VerifyIDTokenAndCheckRevoked(ctx, idToken)
	if err != nil {
		return nil, err
	}

	return token, nil
}