package app

import (
	"context"
	"fmt"
	"strings"

	"github.com/tidbcloud/AgentTeam/internal/coredb"
)

func hasAgentChannelWriteMembership(ctx context.Context, queryer coredb.QueryRower, workspaceID string, memberID string, channelID string) (bool, error) {
	row := queryer.QueryRow(ctx, `
SELECT 1
FROM scopes s
JOIN members m
  ON m.workspace_id = s.workspace_id
 AND m.id = $3
 AND m.type = 'agent'
JOIN scope_memberships sm
  ON sm.scope_id = s.id
 AND sm.member_id = m.id
 AND sm.removed_at IS NULL
 AND sm.archived_at IS NULL
 AND sm.effective_to_seq IS NULL
 AND (
      sm.visibility = 'public'
      OR (sm.visibility = 'private' AND sm.owner_member_id IS NOT NULL)
 )
WHERE s.workspace_id = $1
  AND s.id = $2
  AND s.type = 'channel'
  AND s.status = 'active'
  AND s.archived_at IS NULL
LIMIT 1
`, strings.TrimSpace(workspaceID), strings.TrimSpace(channelID), strings.TrimSpace(memberID))

	var marker int
	if err := row.Scan(&marker); err != nil {
		if coredb.IsNotFound(err) {
			return false, nil
		}
		return false, fmt.Errorf("check agent channel write membership: %w", err)
	}
	return true, nil
}
