//go:build e2e

package client

import (
	"context"
	"fmt"
)

type Workspace struct {
	ID   string `json:"id"`
	Name string `json:"name"`
}

type WorkspaceMemberPage struct {
	Members []map[string]any `json:"members"`
}

func (c *Client) ListWorkspaces(ctx context.Context) ([]Workspace, int, []byte, error) {
	var out []Workspace
	status, raw, err := c.DoJSON(ctx, "GET", "/api/v1/workspaces", nil, &out)
	return out, status, raw, err
}

func (c *Client) ListWorkspaceMembers(ctx context.Context, workspaceID string) (WorkspaceMemberPage, int, []byte, error) {
	var out WorkspaceMemberPage
	status, raw, err := c.DoJSON(ctx, "GET", fmt.Sprintf("/api/v1/workspaces/%s/members", workspaceID), nil, &out)
	return out, status, raw, err
}

func (c *Client) GetWorkspaceUsage(ctx context.Context, workspaceID string) (map[string]any, int, []byte, error) {
	var out map[string]any
	status, raw, err := c.DoJSON(ctx, "GET", fmt.Sprintf("/api/v1/workspaces/%s/usage", workspaceID), nil, &out)
	return out, status, raw, err
}

// WorkspaceInvite is the response from creating a mobile workspace invite.
type WorkspaceInvite struct {
	InviteID   string `json:"inviteId"`
	InviteLink string `json:"inviteLink"`
}

// CreateWorkspaceMobileInvite creates a mobile-bound invite link for an external user.
func (c *Client) CreateWorkspaceMobileInvite(ctx context.Context, workspaceID, mobile string) (WorkspaceInvite, int, []byte, error) {
	req := map[string]string{"mobile": mobile}
	var out WorkspaceInvite
	status, raw, err := c.DoJSON(ctx, "POST", fmt.Sprintf("/api/v1/workspaces/%s/invites", workspaceID), req, &out)
	return out, status, raw, err
}
