package org

import (
	"net/http"
	"strings"

	"github.com/tidbcloud/AgentTeam/internal/api"
	"github.com/tidbcloud/AgentTeam/internal/api/dto"
	"github.com/tidbcloud/AgentTeam/internal/api/dto/converter"
)

// List handles GET /api/v1/orgs.
// It returns all organizations the authenticated user belongs to.
func (handler *CollectionHandler) List(r api.AuthenticatedRequest) (api.Response, error) {
	orgs, ok := handler.organizationProvider()
	if !ok {
		return api.Response{}, api.NewHTTPError(http.StatusNotFound, "Organization provider not installed")
	}

	organizations, err := orgs.ListOrganizationsForUser(r.Context(), r.UserID())
	if err != nil {
		return api.Response{}, err
	}
	return api.OK(converter.ToOrgSummaries(organizations)), nil
}

// Patch handles PATCH /api/v1/orgs/:orgId.
// It updates the editable profile fields for one organization.
func (handler *CollectionHandler) Patch(r api.AuthenticatedJSON[dto.OrganizationPatchRequest]) (api.Response, error) {
	orgs, ok := handler.organizationProvider()
	if !ok {
		return api.Response{}, api.NewHTTPError(http.StatusNotFound, "Organization provider not installed")
	}

	organizationID := strings.TrimSpace(r.Gin.Param("orgId"))
	if organizationID == "" {
		return api.Response{}, api.NewHTTPError(http.StatusBadRequest, "orgId is required")
	}

	updated, err := orgs.PatchOrganizationForUser(r.Context(), r.UserID(), organizationID, updateOrganizationParams(r.Body))
	if err != nil {
		return api.Response{}, err
	}
	return api.OK(converter.ToOrgSummary(updated)), nil
}
