/* tslint:disable */
/* eslint-disable */
/**
 * Commander Spellbook API
 * API for Commander Spellbook, the combo database engine for Magic: The Gathering
 *
 * The version of the OpenAPI document: 4.2.2
 * 
 *
 * 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 { Variant } from './variant';
import {
    VariantFromJSON,
    VariantFromJSONTyped,
    VariantToJSON,
    VariantToJSONTyped,
} from './variant';
import type { BracketTagEnum } from './bracketTagEnum';
import {
    BracketTagEnumFromJSON,
    BracketTagEnumFromJSONTyped,
    BracketTagEnumToJSON,
    BracketTagEnumToJSONTyped,
} from './bracketTagEnum';
import type { Card } from './card';
import {
    CardFromJSON,
    CardFromJSONTyped,
    CardToJSON,
    CardToJSONTyped,
} from './card';

/**
 * 
 * @export
 * @interface EstimateBracketResult
 */
export interface EstimateBracketResult {
    /**
     * 
     * @type {BracketTagEnum}
     * @memberof EstimateBracketResult
     */
    bracketTag: BracketTagEnum;
    /**
     * 
     * @type {Array<Card>}
     * @memberof EstimateBracketResult
     */
    gameChangerCards: Array<Card>;
    /**
     * 
     * @type {Array<Card>}
     * @memberof EstimateBracketResult
     */
    massLandDenialCards: Array<Card>;
    /**
     * 
     * @type {Array<Variant>}
     * @memberof EstimateBracketResult
     */
    massLandDenialTemplates: Array<Variant>;
    /**
     * 
     * @type {Array<Variant>}
     * @memberof EstimateBracketResult
     */
    massLandDenialCombos: Array<Variant>;
    /**
     * 
     * @type {Array<Card>}
     * @memberof EstimateBracketResult
     */
    extraTurnCards: Array<Card>;
    /**
     * 
     * @type {Array<Variant>}
     * @memberof EstimateBracketResult
     */
    extraTurnTemplates: Array<Variant>;
    /**
     * 
     * @type {Array<Variant>}
     * @memberof EstimateBracketResult
     */
    extraTurnsCombos: Array<Variant>;
    /**
     * 
     * @type {Array<Card>}
     * @memberof EstimateBracketResult
     */
    tutorCards: Array<Card>;
    /**
     * 
     * @type {Array<Variant>}
     * @memberof EstimateBracketResult
     */
    tutorTemplates: Array<Variant>;
    /**
     * 
     * @type {Array<Variant>}
     * @memberof EstimateBracketResult
     */
    lockCombos: Array<Variant>;
    /**
     * 
     * @type {Array<Variant>}
     * @memberof EstimateBracketResult
     */
    skipTurnsCombos: Array<Variant>;
    /**
     * 
     * @type {Array<Variant>}
     * @memberof EstimateBracketResult
     */
    definitelyEarlyGameTwoCardCombos: Array<Variant>;
    /**
     * 
     * @type {Array<Variant>}
     * @memberof EstimateBracketResult
     */
    arguablyEarlyGameTwoCardCombos: Array<Variant>;
    /**
     * 
     * @type {Array<Variant>}
     * @memberof EstimateBracketResult
     */
    definitelyLateGameTwoCardCombos: Array<Variant>;
    /**
     * 
     * @type {Array<Variant>}
     * @memberof EstimateBracketResult
     */
    borderlineLateGameTwoCardCombos: Array<Variant>;
}



/**
 * Check if a given object implements the EstimateBracketResult interface.
 */
export function instanceOfEstimateBracketResult(value: object): value is EstimateBracketResult {
    if (!('bracketTag' in value) || value['bracketTag'] === undefined) return false;
    if (!('gameChangerCards' in value) || value['gameChangerCards'] === undefined) return false;
    if (!('massLandDenialCards' in value) || value['massLandDenialCards'] === undefined) return false;
    if (!('massLandDenialTemplates' in value) || value['massLandDenialTemplates'] === undefined) return false;
    if (!('massLandDenialCombos' in value) || value['massLandDenialCombos'] === undefined) return false;
    if (!('extraTurnCards' in value) || value['extraTurnCards'] === undefined) return false;
    if (!('extraTurnTemplates' in value) || value['extraTurnTemplates'] === undefined) return false;
    if (!('extraTurnsCombos' in value) || value['extraTurnsCombos'] === undefined) return false;
    if (!('tutorCards' in value) || value['tutorCards'] === undefined) return false;
    if (!('tutorTemplates' in value) || value['tutorTemplates'] === undefined) return false;
    if (!('lockCombos' in value) || value['lockCombos'] === undefined) return false;
    if (!('skipTurnsCombos' in value) || value['skipTurnsCombos'] === undefined) return false;
    if (!('definitelyEarlyGameTwoCardCombos' in value) || value['definitelyEarlyGameTwoCardCombos'] === undefined) return false;
    if (!('arguablyEarlyGameTwoCardCombos' in value) || value['arguablyEarlyGameTwoCardCombos'] === undefined) return false;
    if (!('definitelyLateGameTwoCardCombos' in value) || value['definitelyLateGameTwoCardCombos'] === undefined) return false;
    if (!('borderlineLateGameTwoCardCombos' in value) || value['borderlineLateGameTwoCardCombos'] === undefined) return false;
    return true;
}

export function EstimateBracketResultFromJSON(json: any): EstimateBracketResult {
    return EstimateBracketResultFromJSONTyped(json, false);
}

export function EstimateBracketResultFromJSONTyped(json: any, ignoreDiscriminator: boolean): EstimateBracketResult {
    if (json == null) {
        return json;
    }
    return {
        
        'bracketTag': BracketTagEnumFromJSON(json['bracketTag']),
        'gameChangerCards': ((json['gameChangerCards'] as Array<any>).map(CardFromJSON)),
        'massLandDenialCards': ((json['massLandDenialCards'] as Array<any>).map(CardFromJSON)),
        'massLandDenialTemplates': ((json['massLandDenialTemplates'] as Array<any>).map(VariantFromJSON)),
        'massLandDenialCombos': ((json['massLandDenialCombos'] as Array<any>).map(VariantFromJSON)),
        'extraTurnCards': ((json['extraTurnCards'] as Array<any>).map(CardFromJSON)),
        'extraTurnTemplates': ((json['extraTurnTemplates'] as Array<any>).map(VariantFromJSON)),
        'extraTurnsCombos': ((json['extraTurnsCombos'] as Array<any>).map(VariantFromJSON)),
        'tutorCards': ((json['tutorCards'] as Array<any>).map(CardFromJSON)),
        'tutorTemplates': ((json['tutorTemplates'] as Array<any>).map(VariantFromJSON)),
        'lockCombos': ((json['lockCombos'] as Array<any>).map(VariantFromJSON)),
        'skipTurnsCombos': ((json['skipTurnsCombos'] as Array<any>).map(VariantFromJSON)),
        'definitelyEarlyGameTwoCardCombos': ((json['definitelyEarlyGameTwoCardCombos'] as Array<any>).map(VariantFromJSON)),
        'arguablyEarlyGameTwoCardCombos': ((json['arguablyEarlyGameTwoCardCombos'] as Array<any>).map(VariantFromJSON)),
        'definitelyLateGameTwoCardCombos': ((json['definitelyLateGameTwoCardCombos'] as Array<any>).map(VariantFromJSON)),
        'borderlineLateGameTwoCardCombos': ((json['borderlineLateGameTwoCardCombos'] as Array<any>).map(VariantFromJSON)),
    };
}

export function EstimateBracketResultToJSON(json: any): EstimateBracketResult {
    return EstimateBracketResultToJSONTyped(json, false);
}

export function EstimateBracketResultToJSONTyped(value?: EstimateBracketResult | null, ignoreDiscriminator: boolean = false): any {
    if (value == null) {
        return value;
    }

    return {
        
        'bracketTag': BracketTagEnumToJSON(value['bracketTag']),
        'gameChangerCards': ((value['gameChangerCards'] as Array<any>).map(CardToJSON)),
        'massLandDenialCards': ((value['massLandDenialCards'] as Array<any>).map(CardToJSON)),
        'massLandDenialTemplates': ((value['massLandDenialTemplates'] as Array<any>).map(VariantToJSON)),
        'massLandDenialCombos': ((value['massLandDenialCombos'] as Array<any>).map(VariantToJSON)),
        'extraTurnCards': ((value['extraTurnCards'] as Array<any>).map(CardToJSON)),
        'extraTurnTemplates': ((value['extraTurnTemplates'] as Array<any>).map(VariantToJSON)),
        'extraTurnsCombos': ((value['extraTurnsCombos'] as Array<any>).map(VariantToJSON)),
        'tutorCards': ((value['tutorCards'] as Array<any>).map(CardToJSON)),
        'tutorTemplates': ((value['tutorTemplates'] as Array<any>).map(VariantToJSON)),
        'lockCombos': ((value['lockCombos'] as Array<any>).map(VariantToJSON)),
        'skipTurnsCombos': ((value['skipTurnsCombos'] as Array<any>).map(VariantToJSON)),
        'definitelyEarlyGameTwoCardCombos': ((value['definitelyEarlyGameTwoCardCombos'] as Array<any>).map(VariantToJSON)),
        'arguablyEarlyGameTwoCardCombos': ((value['arguablyEarlyGameTwoCardCombos'] as Array<any>).map(VariantToJSON)),
        'definitelyLateGameTwoCardCombos': ((value['definitelyLateGameTwoCardCombos'] as Array<any>).map(VariantToJSON)),
        'borderlineLateGameTwoCardCombos': ((value['borderlineLateGameTwoCardCombos'] as Array<any>).map(VariantToJSON)),
    };
}

