package auth

import (
	"secondbit.org/uuid"
)

// Client information
type Client struct {
	ID          uuid.ID
	Secret      string
	RedirectURI string
	OwnerID     uuid.ID
	Name        string
	Logo        string
}

func GetClient(id uuid.ID, ctx Context) (Client, error) {
	return ctx.Clients.GetClient(id)
}

func createClient(name, logo, redirectURI string, owner uuid.ID, ctx Context) (Client, error) {
	return ctx.Clients.CreateClient(name, logo, redirectURI, owner)
}

func updateClient(client *Client, name, logo, redirectURI *string, ctx Context) error {
	if client == nil {
		return NilClientError
	}
	err := ctx.Clients.UpdateClient(client.ID, name, logo, redirectURI)
	if err != nil {
		return err
	}
	if name != nil {
		client.Name = *name
	}
	if logo != nil {
		client.Logo = *logo
	}
	if redirectURI != nil {
		client.RedirectURI = *redirectURI
	}
	return nil
}

func removeClient(id uuid.ID, ctx Context) error {
	return ctx.Clients.RemoveClient(id)
}

func listClients(id uuid.ID, page, num int, ctx Context) ([]Client, error) {
	return ctx.Clients.ListClients(id, page, num)
}
