package dashboard

import (
	"github.com/gin-gonic/gin"
	"github.com/marmotedu/errors"
	"github.com/pingcap-inc/pinsights/internal/pkg/authz"
	"github.com/pingcap-inc/pinsights/internal/pkg/code"
	"github.com/pingcap-inc/pinsights/internal/pkg/middleware"
	"github.com/pingcap-inc/pinsights/pkg/log"
	"github.com/pingcap-inc/pinsights/pkg/util/core"
)

func (u *DashboardController) List(c *gin.Context) {
	log.L(c).Info("list dashboard function called.")

	e, err := authz.GetCasbinEnforcer(nil)
	if err != nil {
		core.WriteResponse(c, errors.WithCode(code.ErrUnknown, ""), nil)

		return
	}

	var authTokenInfo middleware.AuthingTokenInfo
	v, ok := c.Get("AUTHING_TOKEN_INFO")
	authTokenInfo, typeOk := v.(middleware.AuthingTokenInfo)
	if !ok || !typeOk {
		core.WriteResponse(c, errors.WithCode(code.ErrGetAuthingTokenInfo, ""), nil)

		return
	}

	dashboards, err := u.srv.Dashboard().List(c, e, authTokenInfo.Uid)
	if err != nil {
		core.WriteResponse(c, err, nil)

		return
	}

	core.WriteResponse(c, nil, dashboards)
}
