/* 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: 5.4.10
 * 
 *
 * 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.js';
import type { User } from './User.js';
import {
    UserFromJSON,
    UserFromJSONTyped,
    UserToJSON,
    UserToJSONTyped,
} from './User.js';
import type { KindEnum } from './KindEnum.js';
import {
    KindEnumFromJSON,
    KindEnumFromJSONTyped,
    KindEnumToJSON,
    KindEnumToJSONTyped,
} from './KindEnum.js';
import type { SuggestionStatusEnum } from './SuggestionStatusEnum.js';
import {
    SuggestionStatusEnumFromJSON,
    SuggestionStatusEnumFromJSONTyped,
    SuggestionStatusEnumToJSON,
    SuggestionStatusEnumToJSONTyped,
} from './SuggestionStatusEnum.js';
import type { VariantInVariantUpdateSuggestion } from './VariantInVariantUpdateSuggestion.js';
import {
    VariantInVariantUpdateSuggestionFromJSON,
    VariantInVariantUpdateSuggestionFromJSONTyped,
    VariantInVariantUpdateSuggestionToJSON,
    VariantInVariantUpdateSuggestionToJSONTyped,
} from './VariantInVariantUpdateSuggestion.js';

/**
 * 
 * @export
 * @interface VariantUpdateSuggestion
 */
export interface VariantUpdateSuggestion {
    /**
     * 
     * @type {number}
     * @memberof VariantUpdateSuggestion
     */
    readonly id: number;
    /**
     * Suggestion status for editors
     * 
     * * `N` - New
     * * `AD` - Awaiting Discussion
     * * `PA` - Pending Approval
     * * `A` - Accepted
     * * `R` - Rejected
     * @type {SuggestionStatusEnum}
     * @memberof VariantUpdateSuggestion
     */
    readonly status: SuggestionStatusEnum;
    /**
     * Type of suggestion
     * 
     * * `NW` - Not Working
     * * `SE` - Spelling Error
     * * `II` - Incorrect Info
     * * `WC` - Wrong Card
     * * `VG` - Variant Grouping
     * * `O` - Other
     * @type {KindEnum}
     * @memberof VariantUpdateSuggestion
     */
    kind: KindEnum;
    /**
     * 
     * @type {Array<VariantInVariantUpdateSuggestion>}
     * @memberof VariantUpdateSuggestion
     */
    variants: Array<VariantInVariantUpdateSuggestion>;
    /**
     * Description of the problem
     * @type {string}
     * @memberof VariantUpdateSuggestion
     */
    issue: string;
    /**
     * Description of the solution
     * @type {string}
     * @memberof VariantUpdateSuggestion
     */
    solution: string;
    /**
     * Comment written by the user that suggested this
     * @type {string}
     * @memberof VariantUpdateSuggestion
     */
    comment: string;
    /**
     * 
     * @type {User}
     * @memberof VariantUpdateSuggestion
     */
    readonly suggestedBy: User;
    /**
     * 
     * @type {Date}
     * @memberof VariantUpdateSuggestion
     */
    readonly created: Date;
}



/**
 * Check if a given object implements the VariantUpdateSuggestion interface.
 */
export function instanceOfVariantUpdateSuggestion(value: object): value is VariantUpdateSuggestion {
    if (!('id' in value) || value['id'] === undefined) return false;
    if (!('status' in value) || value['status'] === undefined) return false;
    if (!('kind' in value) || value['kind'] === undefined) return false;
    if (!('variants' in value) || value['variants'] === undefined) return false;
    if (!('issue' in value) || value['issue'] === undefined) return false;
    if (!('solution' in value) || value['solution'] === undefined) return false;
    if (!('comment' in value) || value['comment'] === undefined) return false;
    if (!('suggestedBy' in value) || value['suggestedBy'] === undefined) return false;
    if (!('created' in value) || value['created'] === undefined) return false;
    return true;
}

export function VariantUpdateSuggestionFromJSON(json: any): VariantUpdateSuggestion {
    return VariantUpdateSuggestionFromJSONTyped(json, false);
}

export function VariantUpdateSuggestionFromJSONTyped(json: any, ignoreDiscriminator: boolean): VariantUpdateSuggestion {
    if (json == null) {
        return json;
    }
    return {
        
        'id': json['id'],
        'status': SuggestionStatusEnumFromJSON(json['status']),
        'kind': KindEnumFromJSON(json['kind']),
        'variants': ((json['variants'] as Array<any>).map(VariantInVariantUpdateSuggestionFromJSON)),
        'issue': json['issue'],
        'solution': json['solution'],
        'comment': json['comment'],
        'suggestedBy': UserFromJSON(json['suggestedBy']),
        'created': (new Date(json['created'])),
    };
}

export function VariantUpdateSuggestionToJSON(json: any): VariantUpdateSuggestion {
    return VariantUpdateSuggestionToJSONTyped(json, false);
}

export function VariantUpdateSuggestionToJSONTyped(value?: Omit<VariantUpdateSuggestion, 'id'|'status'|'suggestedBy'|'created'> | null, ignoreDiscriminator: boolean = false): any {
    if (value == null) {
        return value;
    }

    return {
        
        'kind': KindEnumToJSON(value['kind']),
        'variants': ((value['variants'] as Array<any>).map(VariantInVariantUpdateSuggestionToJSON)),
        'issue': value['issue'],
        'solution': value['solution'],
        'comment': value['comment'],
    };
}

