package plugindashboards

import (
	"context"

	"github.com/grafana/grafana/pkg/models"
)

// PluginDashboard plugin dashboard model..
type PluginDashboard struct {
	UID              string `json:"uid"`
	PluginId         string `json:"pluginId"`
	Title            string `json:"title"`
	Imported         bool   `json:"imported"`
	ImportedUri      string `json:"importedUri"`
	ImportedUrl      string `json:"importedUrl"`
	Slug             string `json:"slug"`
	DashboardId      int64  `json:"dashboardId"`
	FolderId         int64  `json:"folderId"`
	ImportedRevision int64  `json:"importedRevision"`
	Revision         int64  `json:"revision"`
	Description      string `json:"description"`
	Reference        string `json:"path"`
	Removed          bool   `json:"removed"`
}

// ListPluginDashboardsRequest request object for listing plugin dashboards.
type ListPluginDashboardsRequest struct {
	OrgID    int64
	PluginID string
}

// ListPluginDashboardsResponse response object for listing plugin dashboards.
type ListPluginDashboardsResponse struct {
	Items []*PluginDashboard
}

// LoadPluginDashboardRequest request object for loading a plugin dashboard.
type LoadPluginDashboardRequest struct {
	PluginID  string
	Reference string
}

// LoadPluginDashboardResponse response object for loading a plugin dashboard.
type LoadPluginDashboardResponse struct {
	Dashboard *models.Dashboard
}

// Service interface for listing plugin dashboards.
type Service interface {
	// ListPluginDashboards list plugin dashboards identified by org/plugin.
	ListPluginDashboards(ctx context.Context, req *ListPluginDashboardsRequest) (*ListPluginDashboardsResponse, error)

	// LoadPluginDashboard loads a plugin dashboard identified by plugin and reference.
	LoadPluginDashboard(ctx context.Context, req *LoadPluginDashboardRequest) (*LoadPluginDashboardResponse, error)
}
