//
// Code generated by go-jet DO NOT EDIT.
//
// WARNING: Changes to this file may cause incorrect behavior
// and will be lost if the code is regenerated
//

package table

import (
	"github.com/go-jet/jet/v2/postgres"
)

var Accounts = newAccountsTable("backend", "accounts", "")

type accountsTable struct {
	postgres.Table

	// Columns
	AccountID              postgres.ColumnString
	DisplayName            postgres.ColumnString
	PreferredLanguage      postgres.ColumnString
	TimeZone               postgres.ColumnString
	BlockChat              postgres.ColumnBool
	BlockFriendRequests    postgres.ColumnBool
	CreatedAt              postgres.ColumnTimestampz
	UpdatedAt              postgres.ColumnTimestampz
	AwayStart              postgres.ColumnTime
	AwayEnd                postgres.ColumnTime
	HintBalance            postgres.ColumnInteger
	IsGuest                postgres.ColumnBool
	NotificationsInAppOnly postgres.ColumnBool
	PaidAccount            postgres.ColumnBool
	MergedInto             postgres.ColumnString
	MergedAt               postgres.ColumnTimestampz
	FlaggedHighRateAt      postgres.ColumnTimestampz
	VariantPreferences     postgres.ColumnStringArray
	LastLoginAt            postgres.ColumnTimestampz
	LastLoginIP            postgres.ColumnString
	DeletedAt              postgres.ColumnTimestampz
	DeletedDisplayName     postgres.ColumnString

	AllColumns     postgres.ColumnList
	MutableColumns postgres.ColumnList
	DefaultColumns postgres.ColumnList
}

type AccountsTable struct {
	accountsTable

	EXCLUDED accountsTable
}

// AS creates new AccountsTable with assigned alias
func (a AccountsTable) AS(alias string) *AccountsTable {
	return newAccountsTable(a.SchemaName(), a.TableName(), alias)
}

// Schema creates new AccountsTable with assigned schema name
func (a AccountsTable) FromSchema(schemaName string) *AccountsTable {
	return newAccountsTable(schemaName, a.TableName(), a.Alias())
}

// WithPrefix creates new AccountsTable with assigned table prefix
func (a AccountsTable) WithPrefix(prefix string) *AccountsTable {
	return newAccountsTable(a.SchemaName(), prefix+a.TableName(), a.TableName())
}

// WithSuffix creates new AccountsTable with assigned table suffix
func (a AccountsTable) WithSuffix(suffix string) *AccountsTable {
	return newAccountsTable(a.SchemaName(), a.TableName()+suffix, a.TableName())
}

func newAccountsTable(schemaName, tableName, alias string) *AccountsTable {
	return &AccountsTable{
		accountsTable: newAccountsTableImpl(schemaName, tableName, alias),
		EXCLUDED:      newAccountsTableImpl("", "excluded", ""),
	}
}

func newAccountsTableImpl(schemaName, tableName, alias string) accountsTable {
	var (
		AccountIDColumn              = postgres.StringColumn("account_id")
		DisplayNameColumn            = postgres.StringColumn("display_name")
		PreferredLanguageColumn      = postgres.StringColumn("preferred_language")
		TimeZoneColumn               = postgres.StringColumn("time_zone")
		BlockChatColumn              = postgres.BoolColumn("block_chat")
		BlockFriendRequestsColumn    = postgres.BoolColumn("block_friend_requests")
		CreatedAtColumn              = postgres.TimestampzColumn("created_at")
		UpdatedAtColumn              = postgres.TimestampzColumn("updated_at")
		AwayStartColumn              = postgres.TimeColumn("away_start")
		AwayEndColumn                = postgres.TimeColumn("away_end")
		HintBalanceColumn            = postgres.IntegerColumn("hint_balance")
		IsGuestColumn                = postgres.BoolColumn("is_guest")
		NotificationsInAppOnlyColumn = postgres.BoolColumn("notifications_in_app_only")
		PaidAccountColumn            = postgres.BoolColumn("paid_account")
		MergedIntoColumn             = postgres.StringColumn("merged_into")
		MergedAtColumn               = postgres.TimestampzColumn("merged_at")
		FlaggedHighRateAtColumn      = postgres.TimestampzColumn("flagged_high_rate_at")
		VariantPreferencesColumn     = postgres.StringArrayColumn("variant_preferences")
		LastLoginAtColumn            = postgres.TimestampzColumn("last_login_at")
		LastLoginIPColumn            = postgres.StringColumn("last_login_ip")
		DeletedAtColumn              = postgres.TimestampzColumn("deleted_at")
		DeletedDisplayNameColumn     = postgres.StringColumn("deleted_display_name")
		allColumns                   = postgres.ColumnList{AccountIDColumn, DisplayNameColumn, PreferredLanguageColumn, TimeZoneColumn, BlockChatColumn, BlockFriendRequestsColumn, CreatedAtColumn, UpdatedAtColumn, AwayStartColumn, AwayEndColumn, HintBalanceColumn, IsGuestColumn, NotificationsInAppOnlyColumn, PaidAccountColumn, MergedIntoColumn, MergedAtColumn, FlaggedHighRateAtColumn, VariantPreferencesColumn, LastLoginAtColumn, LastLoginIPColumn, DeletedAtColumn, DeletedDisplayNameColumn}
		mutableColumns               = postgres.ColumnList{DisplayNameColumn, PreferredLanguageColumn, TimeZoneColumn, BlockChatColumn, BlockFriendRequestsColumn, CreatedAtColumn, UpdatedAtColumn, AwayStartColumn, AwayEndColumn, HintBalanceColumn, IsGuestColumn, NotificationsInAppOnlyColumn, PaidAccountColumn, MergedIntoColumn, MergedAtColumn, FlaggedHighRateAtColumn, VariantPreferencesColumn, LastLoginAtColumn, LastLoginIPColumn, DeletedAtColumn, DeletedDisplayNameColumn}
		defaultColumns               = postgres.ColumnList{DisplayNameColumn, PreferredLanguageColumn, TimeZoneColumn, BlockChatColumn, BlockFriendRequestsColumn, CreatedAtColumn, UpdatedAtColumn, AwayStartColumn, AwayEndColumn, HintBalanceColumn, IsGuestColumn, NotificationsInAppOnlyColumn, PaidAccountColumn, VariantPreferencesColumn}
	)

	return accountsTable{
		Table: postgres.NewTable(schemaName, tableName, alias, allColumns...),

		//Columns
		AccountID:              AccountIDColumn,
		DisplayName:            DisplayNameColumn,
		PreferredLanguage:      PreferredLanguageColumn,
		TimeZone:               TimeZoneColumn,
		BlockChat:              BlockChatColumn,
		BlockFriendRequests:    BlockFriendRequestsColumn,
		CreatedAt:              CreatedAtColumn,
		UpdatedAt:              UpdatedAtColumn,
		AwayStart:              AwayStartColumn,
		AwayEnd:                AwayEndColumn,
		HintBalance:            HintBalanceColumn,
		IsGuest:                IsGuestColumn,
		NotificationsInAppOnly: NotificationsInAppOnlyColumn,
		PaidAccount:            PaidAccountColumn,
		MergedInto:             MergedIntoColumn,
		MergedAt:               MergedAtColumn,
		FlaggedHighRateAt:      FlaggedHighRateAtColumn,
		VariantPreferences:     VariantPreferencesColumn,
		LastLoginAt:            LastLoginAtColumn,
		LastLoginIP:            LastLoginIPColumn,
		DeletedAt:              DeletedAtColumn,
		DeletedDisplayName:     DeletedDisplayNameColumn,

		AllColumns:     allColumns,
		MutableColumns: mutableColumns,
		DefaultColumns: defaultColumns,
	}
}
