package doctor

import (
	"fmt"
	"os"
	"os/exec"
	"path/filepath"
	"strings"

	"github.com/host-uk/core/pkg/i18n"
	"github.com/host-uk/core/pkg/io"
	"github.com/host-uk/core/pkg/repos"
)

// checkGitHubSSH checks if SSH keys exist for GitHub access
func checkGitHubSSH() bool {
	// Just check if SSH keys exist - don't try to authenticate
	// (key might be locked/passphrase protected)
	home, err := os.UserHomeDir()
	if err != nil {
		return false
	}

	sshDir := filepath.Join(home, ".ssh")
	keyPatterns := []string{"id_rsa", "id_ed25519", "id_ecdsa", "id_dsa"}

	for _, key := range keyPatterns {
		keyPath := filepath.Join(sshDir, key)
		if _, err := os.Stat(keyPath); err == nil {
			return true
		}
	}

	return false
}

// checkGitHubCLI checks if the GitHub CLI is authenticated
func checkGitHubCLI() bool {
	cmd := exec.Command("gh", "auth", "status")
	output, _ := cmd.CombinedOutput()
	// Check for any successful login (even if there's also a failing token)
	return strings.Contains(string(output), "Logged in to")
}

// checkWorkspace checks for repos.yaml and counts cloned repos
func checkWorkspace() {
	registryPath, err := repos.FindRegistry(io.Local)
	if err == nil {
		fmt.Printf("  %s %s\n", successStyle.Render("✓"), i18n.T("cmd.doctor.repos_yaml_found", map[string]interface{}{"Path": registryPath}))

		reg, err := repos.LoadRegistry(io.Local, registryPath)
		if err == nil {
			basePath := reg.BasePath
			if basePath == "" {
				basePath = "./packages"
			}
			if !filepath.IsAbs(basePath) {
				basePath = filepath.Join(filepath.Dir(registryPath), basePath)
			}
			if strings.HasPrefix(basePath, "~/") {
				home, _ := os.UserHomeDir()
				basePath = filepath.Join(home, basePath[2:])
			}

			// Count existing repos
			allRepos := reg.List()
			var cloned int
			for _, repo := range allRepos {
				repoPath := filepath.Join(basePath, repo.Name)
				if _, err := os.Stat(filepath.Join(repoPath, ".git")); err == nil {
					cloned++
				}
			}
			fmt.Printf("  %s %s\n", successStyle.Render("✓"), i18n.T("cmd.doctor.repos_cloned", map[string]interface{}{"Cloned": cloned, "Total": len(allRepos)}))
		}
	} else {
		fmt.Printf("  %s %s\n", dimStyle.Render("○"), i18n.T("cmd.doctor.no_repos_yaml"))
	}
}
