// Copyright 2019 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT

package cmd

import (
	stdctx "context"

	gitea "gitea.dev/sdk"

	"gitea.dev/tea/cmd/repos"
	"gitea.dev/tea/modules/context"
	"gitea.dev/tea/modules/print"
	"gitea.dev/tea/modules/utils"
	"github.com/urfave/cli/v3"
)

// CmdRepos represents the command to manage repositories.
var CmdRepos = cli.Command{
	Name:        "repos",
	Aliases:     []string{"repo"},
	Category:    catEntities,
	Usage:       "Manage repositories",
	Description: "Manage repositories",
	ArgsUsage:   "[<repo owner>/<repo name>]",
	Action:      runRepos,
	Commands: []*cli.Command{
		&repos.CmdReposList,
		&repos.CmdReposSearch,
		&repos.CmdRepoCreate,
		&repos.CmdRepoCreateFromTemplate,
		&repos.CmdRepoFork,
		&repos.CmdRepoMigrate,
		&repos.CmdRepoRm,
		&repos.CmdRepoEdit,
	},
	Flags: repos.CmdReposListFlags,
}

func runRepos(ctx stdctx.Context, cmd *cli.Command) error {
	if cmd.Args().Len() == 1 {
		return runRepoDetail(ctx, cmd, cmd.Args().First())
	}
	return repos.RunReposList(ctx, cmd)
}

func runRepoDetail(requestCtx stdctx.Context, cmd *cli.Command, path string) error {
	ctx, err := context.InitCommand(cmd)
	if err != nil {
		return err
	}
	client := ctx.Login.Client()
	repoOwner, repoName := utils.GetOwnerAndRepo(path, ctx.Owner)
	repo, _, err := client.Repositories.GetRepo(requestCtx, repoOwner, repoName)
	if err != nil {
		return err
	}
	topics, _, err := client.Repositories.ListRepoTopics(requestCtx, repoOwner, repoName, gitea.ListRepoTopicsOptions{})
	if err != nil {
		return err
	}

	print.RepoDetails(repo, topics)
	return nil
}
