package org

import (
	"github.com/tidbcloud/AgentTeam/internal/api/dto"
	"github.com/tidbcloud/AgentTeam/internal/store/organization"
)

func createOrganizationInviteParams(request dto.OrganizationInviteCreateRequest, email string) organization.CreateOrganizationInviteParams {
	return organization.CreateOrganizationInviteParams{
		Email:                email,
		Role:                 request.Role,
		TeamID:               request.TeamID,
		DefaultWorkspaceRole: request.DefaultWorkspaceRole,
	}
}

func findOrganizationSummary(organizations []organization.OrganizationSummary, organizationID string) (organization.OrganizationSummary, bool) {
	for _, item := range organizations {
		if item.ID == organizationID {
			return item, true
		}
	}
	return organization.OrganizationSummary{}, false
}

func updateOrganizationParams(request dto.OrganizationPatchRequest) organization.UpdateOrganizationParams {
	return organization.UpdateOrganizationParams{
		Name: request.Name,
	}
}

func updateOrganizationSettingsParams(request dto.OrganizationSettingsPatchRequest) organization.UpdateOrganizationSettingsParams {
	params := organization.UpdateOrganizationSettingsParams{
		DirectoryBackend:  request.DirectoryBackend,
		AuthProvider:      request.AuthProvider,
		DirectoryProvider: request.DirectoryProvider,
	}
	if request.Feishu != nil {
		params.Feishu = &organization.UpdateOrganizationFeishuProviderSettingsParams{
			TenantKey:        request.Feishu.TenantKey,
			RootDepartmentID: request.Feishu.RootDepartmentID,
		}
	}
	return params
}

func updateOrganizationHostedModelSettingsParams(request dto.OrganizationHostedModelSettingsPatchRequest) organization.UpdateOrganizationHostedModelSettingsParams {
	return organization.UpdateOrganizationHostedModelSettingsParams{
		PickerVisibilityPolicy:     request.PickerVisibilityPolicy,
		AutoAuthorizationEnabled:   request.AutoAuthorizationEnabled,
		AutoAuthorizationMode:      request.AutoAuthorizationMode,
		AutoAuthorizationModelRefs: request.AutoAuthorizationModelRefs,
	}
}

func upsertOrganizationWorkspaceHostedModelAuthorizationParams(request dto.OrganizationWorkspaceHostedModelAuthorizationPutRequest) organization.UpsertOrganizationWorkspaceHostedModelAuthorizationParams {
	return organization.UpsertOrganizationWorkspaceHostedModelAuthorizationParams{
		AuthorizationMode: request.AuthorizationMode,
		SelectedModelRefs: request.SelectedModelRefs,
	}
}

func addOrganizationTeamMemberParams(request dto.OrganizationTeamMemberCreateRequest) organization.AddOrganizationTeamMemberParams {
	return organization.AddOrganizationTeamMemberParams{
		MemberID: request.MemberID,
		Primary:  request.Primary,
	}
}

func createOrganizationUnitParams(request dto.OrganizationUnitCreateRequest) organization.CreateOrganizationUnitParams {
	return organization.CreateOrganizationUnitParams{
		Name:            request.Name,
		Slug:            request.Slug,
		ParentUnitID:    request.ParentUnitID,
		ManagerMemberID: request.ManagerMemberID,
	}
}

func addOrganizationUnitMemberParams(request dto.OrganizationUnitMemberCreateRequest) organization.AddOrganizationUnitMemberParams {
	return organization.AddOrganizationUnitMemberParams{
		MemberID: request.MemberID,
		Primary:  request.Primary,
	}
}
