/* tslint:disable */
/* eslint-disable */
/**
 * authentik
 * Making authentication simple.
 *
 * The version of the OpenAPI document: 2025.12.0-rc1
 * Contact: hello@goauthentik.io
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

import { mapValues } from '../runtime';
import type { PolicyEngineMode } from './PolicyEngineMode';
import {
    PolicyEngineModeFromJSON,
    PolicyEngineModeFromJSONTyped,
    PolicyEngineModeToJSON,
    PolicyEngineModeToJSONTyped,
} from './PolicyEngineMode';
import type { UserMatchingModeEnum } from './UserMatchingModeEnum';
import {
    UserMatchingModeEnumFromJSON,
    UserMatchingModeEnumFromJSONTyped,
    UserMatchingModeEnumToJSON,
    UserMatchingModeEnumToJSONTyped,
} from './UserMatchingModeEnum';

/**
 * Source Serializer
 * @export
 * @interface TelegramSource
 */
export interface TelegramSource {
    /**
     * 
     * @type {string}
     * @memberof TelegramSource
     */
    readonly pk: string;
    /**
     * Source's display Name.
     * @type {string}
     * @memberof TelegramSource
     */
    name: string;
    /**
     * Internal source name, used in URLs.
     * @type {string}
     * @memberof TelegramSource
     */
    slug: string;
    /**
     * 
     * @type {boolean}
     * @memberof TelegramSource
     */
    enabled?: boolean;
    /**
     * When enabled, this source will be displayed as a prominent button on the login page, instead of a small icon.
     * @type {boolean}
     * @memberof TelegramSource
     */
    promoted?: boolean;
    /**
     * Flow to use when authenticating existing users.
     * @type {string}
     * @memberof TelegramSource
     */
    authenticationFlow?: string | null;
    /**
     * Flow to use when enrolling new users.
     * @type {string}
     * @memberof TelegramSource
     */
    enrollmentFlow?: string | null;
    /**
     * 
     * @type {Array<string>}
     * @memberof TelegramSource
     */
    userPropertyMappings?: Array<string>;
    /**
     * 
     * @type {Array<string>}
     * @memberof TelegramSource
     */
    groupPropertyMappings?: Array<string>;
    /**
     * Get object component so that we know how to edit the object
     * @type {string}
     * @memberof TelegramSource
     */
    readonly component: string;
    /**
     * Return object's verbose_name
     * @type {string}
     * @memberof TelegramSource
     */
    readonly verboseName: string;
    /**
     * Return object's plural verbose_name
     * @type {string}
     * @memberof TelegramSource
     */
    readonly verboseNamePlural: string;
    /**
     * Return internal model name
     * @type {string}
     * @memberof TelegramSource
     */
    readonly metaModelName: string;
    /**
     * 
     * @type {PolicyEngineMode}
     * @memberof TelegramSource
     */
    policyEngineMode?: PolicyEngineMode;
    /**
     * How the source determines if an existing user should be authenticated or a new user enrolled.
     * @type {UserMatchingModeEnum}
     * @memberof TelegramSource
     */
    userMatchingMode?: UserMatchingModeEnum;
    /**
     * Objects that are managed by authentik. These objects are created and updated automatically. This flag only indicates that an object can be overwritten by migrations. You can still modify the objects via the API, but expect changes to be overwritten in a later update.
     * @type {string}
     * @memberof TelegramSource
     */
    readonly managed: string | null;
    /**
     * 
     * @type {string}
     * @memberof TelegramSource
     */
    userPathTemplate?: string;
    /**
     * 
     * @type {string}
     * @memberof TelegramSource
     */
    readonly icon: string | null;
    /**
     * Telegram bot username
     * @type {string}
     * @memberof TelegramSource
     */
    botUsername: string;
    /**
     * Request access to send messages from your bot.
     * @type {boolean}
     * @memberof TelegramSource
     */
    requestMessageAccess?: boolean;
    /**
     * Flow used before authentication.
     * @type {string}
     * @memberof TelegramSource
     */
    preAuthenticationFlow: string;
}



/**
 * Check if a given object implements the TelegramSource interface.
 */
export function instanceOfTelegramSource(value: object): value is TelegramSource {
    if (!('pk' in value) || value['pk'] === undefined) return false;
    if (!('name' in value) || value['name'] === undefined) return false;
    if (!('slug' in value) || value['slug'] === undefined) return false;
    if (!('component' in value) || value['component'] === undefined) return false;
    if (!('verboseName' in value) || value['verboseName'] === undefined) return false;
    if (!('verboseNamePlural' in value) || value['verboseNamePlural'] === undefined) return false;
    if (!('metaModelName' in value) || value['metaModelName'] === undefined) return false;
    if (!('managed' in value) || value['managed'] === undefined) return false;
    if (!('icon' in value) || value['icon'] === undefined) return false;
    if (!('botUsername' in value) || value['botUsername'] === undefined) return false;
    if (!('preAuthenticationFlow' in value) || value['preAuthenticationFlow'] === undefined) return false;
    return true;
}

export function TelegramSourceFromJSON(json: any): TelegramSource {
    return TelegramSourceFromJSONTyped(json, false);
}

export function TelegramSourceFromJSONTyped(json: any, ignoreDiscriminator: boolean): TelegramSource {
    if (json == null) {
        return json;
    }
    return {
        
        'pk': json['pk'],
        'name': json['name'],
        'slug': json['slug'],
        'enabled': json['enabled'] == null ? undefined : json['enabled'],
        'promoted': json['promoted'] == null ? undefined : json['promoted'],
        'authenticationFlow': json['authentication_flow'] == null ? undefined : json['authentication_flow'],
        'enrollmentFlow': json['enrollment_flow'] == null ? undefined : json['enrollment_flow'],
        'userPropertyMappings': json['user_property_mappings'] == null ? undefined : json['user_property_mappings'],
        'groupPropertyMappings': json['group_property_mappings'] == null ? undefined : json['group_property_mappings'],
        'component': json['component'],
        'verboseName': json['verbose_name'],
        'verboseNamePlural': json['verbose_name_plural'],
        'metaModelName': json['meta_model_name'],
        'policyEngineMode': json['policy_engine_mode'] == null ? undefined : PolicyEngineModeFromJSON(json['policy_engine_mode']),
        'userMatchingMode': json['user_matching_mode'] == null ? undefined : UserMatchingModeEnumFromJSON(json['user_matching_mode']),
        'managed': json['managed'],
        'userPathTemplate': json['user_path_template'] == null ? undefined : json['user_path_template'],
        'icon': json['icon'],
        'botUsername': json['bot_username'],
        'requestMessageAccess': json['request_message_access'] == null ? undefined : json['request_message_access'],
        'preAuthenticationFlow': json['pre_authentication_flow'],
    };
}

export function TelegramSourceToJSON(json: any): TelegramSource {
    return TelegramSourceToJSONTyped(json, false);
}

export function TelegramSourceToJSONTyped(value?: Omit<TelegramSource, 'pk'|'component'|'verbose_name'|'verbose_name_plural'|'meta_model_name'|'managed'|'icon'> | null, ignoreDiscriminator: boolean = false): any {
    if (value == null) {
        return value;
    }

    return {
        
        'name': value['name'],
        'slug': value['slug'],
        'enabled': value['enabled'],
        'promoted': value['promoted'],
        'authentication_flow': value['authenticationFlow'],
        'enrollment_flow': value['enrollmentFlow'],
        'user_property_mappings': value['userPropertyMappings'],
        'group_property_mappings': value['groupPropertyMappings'],
        'policy_engine_mode': PolicyEngineModeToJSON(value['policyEngineMode']),
        'user_matching_mode': UserMatchingModeEnumToJSON(value['userMatchingMode']),
        'user_path_template': value['userPathTemplate'],
        'bot_username': value['botUsername'],
        'request_message_access': value['requestMessageAccess'],
        'pre_authentication_flow': value['preAuthenticationFlow'],
    };
}

