// Package organization provides primitives to interact with the openapi HTTP API.
//
// Code generated by github.com/oapi-codegen/oapi-codegen/v2 version v2.5.1 DO NOT EDIT.
package organization

import (
	core "github.com/meshery/schemas/models/core"
	"github.com/gofrs/uuid"
)

// Defines values for OrgTeamActionPayloadAction.
const (
	Delete OrgTeamActionPayloadAction = "delete"
)

// AvailableOrganization defines model for AvailableOrganization.
type AvailableOrganization struct {
	Country     Text         `json:"country,omitempty" yaml:"country,omitempty"`
	CreatedAt   Time         `json:"created_at,omitempty" yaml:"created_at,omitempty"`
	DeletedAt   NullableTime `json:"deleted_at,omitempty" yaml:"deleted_at,omitempty"`
	Description Text         `json:"description,omitempty" yaml:"description,omitempty"`

	// Id A Universally Unique Identifier used to uniquely identify entities in Meshery. The UUID core definition is used across different schemas.
	ID        *UUID        `json:"id,omitempty" yaml:"id,omitempty"`
	Metadata  *OrgMetadata `json:"metadata,omitempty" yaml:"metadata,omitempty"`
	Name      Text         `json:"name,omitempty" yaml:"name,omitempty"`
	Owner     Text         `json:"owner,omitempty" yaml:"owner,omitempty"`
	Region    Text         `json:"region,omitempty" yaml:"region,omitempty"`
	UpdatedAt Time         `json:"updated_at,omitempty" yaml:"updated_at,omitempty"`
}

// AvailableTeam defines model for AvailableTeam.
type AvailableTeam struct {
	CreatedAt   Time                   `json:"created_at,omitempty" yaml:"created_at,omitempty"`
	DeletedAt   NullableTime           `json:"deleted_at,omitempty" yaml:"deleted_at,omitempty"`
	Description Text                   `json:"description,omitempty" yaml:"description,omitempty"`
	ID          core.GeneralId `db:"id" json:"id" yaml:"id"`
	Metadata    MapObject              `json:"metadata,omitempty" yaml:"metadata,omitempty"`
	Name        Text                   `json:"name,omitempty" yaml:"name,omitempty"`
	Owner       Text                   `json:"owner,omitempty" yaml:"owner,omitempty"`
	UpdatedAt   Time                   `json:"updated_at,omitempty" yaml:"updated_at,omitempty"`
}

// DashboardPrefs Preferences specific to dashboard behavior
type DashboardPrefs map[string]interface{}

// Location defines model for Location.
type Location struct {
	// Location The location of the location.
	Location string `json:"location" yaml:"location"`

	// Svg The svg of the location.
	Svg string `json:"svg" yaml:"svg"`
}

// Logo defines model for Logo.
type Logo struct {
	DarkDesktopView Location `json:"darkDesktopView" yaml:"darkDesktopView"`
	DarkMobileView  Location `json:"darkMobileView" yaml:"darkMobileView"`
	DesktopView     Location `json:"desktopView" yaml:"desktopView"`
	MobileView      Location `json:"mobileView" yaml:"mobileView"`
}

// MapObject defines model for MapObject.
type MapObject = core.MapObject

// NullableTime defines model for NullableTime.
type NullableTime = core.SqlNullTime

// OrgMetadata defines model for OrgMetadata.
type OrgMetadata struct {
	Preferences Preferences `json:"preferences" yaml:"preferences"`
}

// OrgTeamActionPayload Optional action payload for POST on /api/identity/orgs/{orgId}/teams/{teamId}.
type OrgTeamActionPayload struct {
	// Action Internal action to perform on the team resource.
	Action *OrgTeamActionPayloadAction `json:"action,omitempty" yaml:"action,omitempty"`
}

// OrgTeamActionPayloadAction Internal action to perform on the team resource.
type OrgTeamActionPayloadAction string

// Organization defines model for Organization.
type Organization struct {
	// Country The country of the organization.
	Country   string       `db:"country" json:"country" yaml:"country"`
	CreatedAt Time         `db:"created_at" json:"created_at" yaml:"created_at"`
	DeletedAt NullableTime `db:"deleted_at" json:"deleted_at,omitempty" yaml:"deleted_at,omitempty"`

	// Description Description of the organization.
	Description string `db:"description" json:"description" yaml:"description"`

	// Domain The domain of the organization.
	Domain *string `db:"domain" json:"domain" yaml:"domain"`

	// Id A Universally Unique Identifier used to uniquely identify entities in Meshery. The UUID core definition is used across different schemas.
	ID       UUID        `db:"id" json:"id" yaml:"id"`
	Metadata OrgMetadata `db:"metadata" json:"metadata" yaml:"metadata"`

	// Name Name of the organization.
	Name string `db:"name" json:"name" yaml:"name"`

	// Owner A Universally Unique Identifier used to uniquely identify entities in Meshery. The UUID core definition is used across different schemas.
	Owner UUID `db:"owner" json:"owner" yaml:"owner"`

	// Region The region of the organization.
	Region    string `db:"region" json:"region" yaml:"region"`
	UpdatedAt Time   `db:"updated_at" json:"updated_at" yaml:"updated_at"`
}

// OrganizationPage Single-organization wrapper used by current meshery-cloud organization handlers.
type OrganizationPage struct {
	// Organizations The organizations of the organizationpage.
	Organizations *[]AvailableOrganization `json:"organizations,omitempty" yaml:"organizations,omitempty"`

	// Page Current page number of the result set.
	Page *int `json:"page,omitempty" yaml:"page,omitempty"`

	// PageSize Number of items per page.
	PageSize *int `json:"page_size,omitempty" yaml:"page_size,omitempty"`

	// TotalCount Total number of items available.
	TotalCount *int `json:"total_count,omitempty" yaml:"total_count,omitempty"`
}

// OrganizationPayload defines model for OrganizationPayload.
type OrganizationPayload struct {
	Country     Text `json:"country,omitempty" yaml:"country,omitempty"`
	Description Text `json:"description,omitempty" yaml:"description,omitempty"`
	Name        Text `json:"name,omitempty" yaml:"name,omitempty"`

	// NotifyOrgUpdate The notify org update of the organization.
	NotifyOrgUpdate *bool        `json:"notifyOrgUpdate,omitempty" yaml:"notifyOrgUpdate,omitempty"`
	Preferences     *Preferences `json:"preferences,omitempty" yaml:"preferences,omitempty"`
	Region          Text         `json:"region,omitempty" yaml:"region,omitempty"`
}

// OrganizationsPage defines model for OrganizationsPage.
type OrganizationsPage struct {
	// Organizations The organizations of the organizationspage.
	Organizations *[]AvailableOrganization `json:"organizations,omitempty" yaml:"organizations,omitempty"`

	// Page Current page number of the result set.
	Page *int `json:"page,omitempty" yaml:"page,omitempty"`

	// PageSize Number of items per page.
	PageSize *int `json:"page_size,omitempty" yaml:"page_size,omitempty"`

	// TotalCount Total number of items available.
	TotalCount *int `json:"total_count,omitempty" yaml:"total_count,omitempty"`
}

// Preferences defines model for Preferences.
type Preferences struct {
	// Dashboard Preferences specific to dashboard behavior
	Dashboard DashboardPrefs `json:"dashboard" yaml:"dashboard"`
	Theme     Theme          `json:"theme" yaml:"theme"`
}

// TeamsOrganizationsMapping defines model for TeamsOrganizationsMapping.
type TeamsOrganizationsMapping struct {
	CreatedAt Time                        `json:"created_at,omitempty" yaml:"created_at,omitempty"`
	DeletedAt NullableTime                `json:"deleted_at,omitempty" yaml:"deleted_at,omitempty"`
	ID        core.GeneralId      `db:"id" json:"id" yaml:"id"`
	OrgId     core.OrganizationId `db:"org_id" json:"org_id" yaml:"org_id"`
	TeamId    core.TeamId         `db:"team_id" json:"team_id" yaml:"team_id"`
	UpdatedAt Time                        `json:"updated_at,omitempty" yaml:"updated_at,omitempty"`
}

// TeamsOrganizationsMappingPage defines model for TeamsOrganizationsMappingPage.
type TeamsOrganizationsMappingPage struct {
	// Page Current page number of the result set.
	Page *int `json:"page,omitempty" yaml:"page,omitempty"`

	// PageSize Number of items per page.
	PageSize *int `json:"page_size,omitempty" yaml:"page_size,omitempty"`

	// TeamsOrganizationsMapping The teams organizations mapping of the teamsorganizationsmappingpage.
	TeamsOrganizationsMapping *[]TeamsOrganizationsMapping `json:"teamsOrganizationsMapping,omitempty" yaml:"teamsOrganizationsMapping,omitempty"`

	// TotalCount Total number of items available.
	TotalCount *int `json:"total_count,omitempty" yaml:"total_count,omitempty"`
}

// TeamsPage defines model for TeamsPage.
type TeamsPage struct {
	// Page Current page number of the result set.
	Page *int `json:"page,omitempty" yaml:"page,omitempty"`

	// PageSize Number of items per page.
	PageSize *int `json:"page_size,omitempty" yaml:"page_size,omitempty"`

	// Teams The teams of the teamspage.
	Teams *[]AvailableTeam `json:"teams,omitempty" yaml:"teams,omitempty"`

	// TotalCount Total number of items available.
	TotalCount *int `json:"total_count,omitempty" yaml:"total_count,omitempty"`
}

// Text defines model for Text.
type Text = core.Text

// Theme defines model for Theme.
type Theme struct {
	// Id Theme ID.
	ID   uuid.UUID `json:"id" yaml:"id"`
	Logo Logo               `json:"logo" yaml:"logo"`

	// Vars The vars of the theme.
	Vars *map[string]interface{} `json:"vars,omitempty" yaml:"vars,omitempty"`
}

// Time defines model for Time.
type Time = core.Time

// UUID A Universally Unique Identifier used to uniquely identify entities in Meshery. The UUID core definition is used across different schemas.
type UUID = core.Uuid

// All defines model for all.
type All = bool

// Order defines model for order.
type Order = string

// OrgId defines model for orgId.
type OrgId = core.OrganizationId

// Page defines model for page.
type Page = string

// Pagesize defines model for pagesize.
type Pagesize = string

// Search defines model for search.
type Search = string

// TeamId defines model for teamId.
type TeamId = core.TeamId
