package mcp

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

	"github.com/tidbcloud/AgentTeam/desktop/internal/types"
)

// resolveAttachmentPaths resolves each raw file path against the session's
// workDir and validates that it points to an existing regular file. It returns
// a slice of OutboundAttachment values ready for use in OutboundMessage.
func resolveAttachmentPaths(filePaths []string, workDir string) ([]types.OutboundAttachment, error) {
	if len(filePaths) == 0 {
		return nil, nil
	}

	attachments := make([]types.OutboundAttachment, 0, len(filePaths))
	for _, raw := range filePaths {
		raw = strings.TrimSpace(raw)
		if raw == "" {
			return nil, fmt.Errorf("file path is required")
		}

		resolved := raw
		if !filepath.IsAbs(resolved) {
			resolved = filepath.Join(workDir, resolved)
		}

		absPath, err := filepath.Abs(resolved)
		if err != nil {
			return nil, fmt.Errorf("resolve attachment path: %w", err)
		}

		stat, err := os.Stat(absPath)
		if err != nil {
			return nil, fmt.Errorf("stat attachment: %w", err)
		}
		if stat.IsDir() {
			return nil, fmt.Errorf("attachment path %q is a directory", absPath)
		}

		attachments = append(attachments, types.OutboundAttachment{
			Path:     absPath,
			Filename: filepath.Base(absPath),
		})
	}
	return attachments, nil
}
