// @ts-check
// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
// This file is automatically generated. DO NOT EDIT

// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore: Unused imports
import { Create as $Create } from "@wailsio/runtime";

/**
 * ExtractFrameRequest 抽帧请求
 */
export class ExtractFrameRequest {
    /**
     * Creates a new ExtractFrameRequest instance.
     * @param {Partial<ExtractFrameRequest>} [$$source = {}] - The source object to create the ExtractFrameRequest.
     */
    constructor($$source = {}) {
        if (!("folderPath" in $$source)) {
            /**
             * @member
             * @type {string}
             */
            this["folderPath"] = "";
        }
        if (!("extractCount" in $$source)) {
            /**
             * 每个视频生成的数量
             * @member
             * @type {number}
             */
            this["extractCount"] = 0;
        }

        Object.assign(this, $$source);
    }

    /**
     * Creates a new ExtractFrameRequest instance from a string or object.
     * @param {any} [$$source = {}]
     * @returns {ExtractFrameRequest}
     */
    static createFrom($$source = {}) {
        let $$parsedSource = typeof $$source === 'string' ? JSON.parse($$source) : $$source;
        return new ExtractFrameRequest(/** @type {Partial<ExtractFrameRequest>} */($$parsedSource));
    }
}

/**
 * ExtractFrameResult 抽帧结果
 */
export class ExtractFrameResult {
    /**
     * Creates a new ExtractFrameResult instance.
     * @param {Partial<ExtractFrameResult>} [$$source = {}] - The source object to create the ExtractFrameResult.
     */
    constructor($$source = {}) {
        if (!("videoPath" in $$source)) {
            /**
             * @member
             * @type {string}
             */
            this["videoPath"] = "";
        }
        if (!("outputPath" in $$source)) {
            /**
             * @member
             * @type {string}
             */
            this["outputPath"] = "";
        }
        if (!("success" in $$source)) {
            /**
             * @member
             * @type {boolean}
             */
            this["success"] = false;
        }
        if (/** @type {any} */(false)) {
            /**
             * @member
             * @type {string | undefined}
             */
            this["error"] = undefined;
        }

        Object.assign(this, $$source);
    }

    /**
     * Creates a new ExtractFrameResult instance from a string or object.
     * @param {any} [$$source = {}]
     * @returns {ExtractFrameResult}
     */
    static createFrom($$source = {}) {
        let $$parsedSource = typeof $$source === 'string' ? JSON.parse($$source) : $$source;
        return new ExtractFrameResult(/** @type {Partial<ExtractFrameResult>} */($$parsedSource));
    }
}

/**
 * FolderInfo 文件夹信息
 */
export class FolderInfo {
    /**
     * Creates a new FolderInfo instance.
     * @param {Partial<FolderInfo>} [$$source = {}] - The source object to create the FolderInfo.
     */
    constructor($$source = {}) {
        if (!("path" in $$source)) {
            /**
             * @member
             * @type {string}
             */
            this["path"] = "";
        }
        if (!("name" in $$source)) {
            /**
             * @member
             * @type {string}
             */
            this["name"] = "";
        }
        if (!("videoCount" in $$source)) {
            /**
             * @member
             * @type {number}
             */
            this["videoCount"] = 0;
        }
        if (!("videoPaths" in $$source)) {
            /**
             * @member
             * @type {string[]}
             */
            this["videoPaths"] = [];
        }

        Object.assign(this, $$source);
    }

    /**
     * Creates a new FolderInfo instance from a string or object.
     * @param {any} [$$source = {}]
     * @returns {FolderInfo}
     */
    static createFrom($$source = {}) {
        const $$createField3_0 = $$createType0;
        let $$parsedSource = typeof $$source === 'string' ? JSON.parse($$source) : $$source;
        if ("videoPaths" in $$parsedSource) {
            $$parsedSource["videoPaths"] = $$createField3_0($$parsedSource["videoPaths"]);
        }
        return new FolderInfo(/** @type {Partial<FolderInfo>} */($$parsedSource));
    }
}

/**
 * LoginResponse 登录响应
 */
export class LoginResponse {
    /**
     * Creates a new LoginResponse instance.
     * @param {Partial<LoginResponse>} [$$source = {}] - The source object to create the LoginResponse.
     */
    constructor($$source = {}) {
        if (!("Code" in $$source)) {
            /**
             * @member
             * @type {number}
             */
            this["Code"] = 0;
        }
        if (!("Msg" in $$source)) {
            /**
             * @member
             * @type {string}
             */
            this["Msg"] = "";
        }
        if (!("Data" in $$source)) {
            /**
             * @member
             * @type {any}
             */
            this["Data"] = null;
        }

        Object.assign(this, $$source);
    }

    /**
     * Creates a new LoginResponse instance from a string or object.
     * @param {any} [$$source = {}]
     * @returns {LoginResponse}
     */
    static createFrom($$source = {}) {
        let $$parsedSource = typeof $$source === 'string' ? JSON.parse($$source) : $$source;
        return new LoginResponse(/** @type {Partial<LoginResponse>} */($$parsedSource));
    }
}

/**
 * VideoConcatRequest 视频拼接请求
 */
export class VideoConcatRequest {
    /**
     * Creates a new VideoConcatRequest instance.
     * @param {Partial<VideoConcatRequest>} [$$source = {}] - The source object to create the VideoConcatRequest.
     */
    constructor($$source = {}) {
        if (!("folderPath" in $$source)) {
            /**
             * @member
             * @type {string}
             */
            this["folderPath"] = "";
        }
        if (!("num" in $$source)) {
            /**
             * @member
             * @type {number}
             */
            this["num"] = 0;
        }
        if (!("joinType" in $$source)) {
            /**
             * 1: 组合拼接, 2: 顺序拼接
             * @member
             * @type {number}
             */
            this["joinType"] = 0;
        }
        if (!("auditImagePath" in $$source)) {
            /**
             * @member
             * @type {string}
             */
            this["auditImagePath"] = "";
        }
        if (!("folderInfos" in $$source)) {
            /**
             * @member
             * @type {FolderInfo[]}
             */
            this["folderInfos"] = [];
        }

        Object.assign(this, $$source);
    }

    /**
     * Creates a new VideoConcatRequest instance from a string or object.
     * @param {any} [$$source = {}]
     * @returns {VideoConcatRequest}
     */
    static createFrom($$source = {}) {
        const $$createField4_0 = $$createType2;
        let $$parsedSource = typeof $$source === 'string' ? JSON.parse($$source) : $$source;
        if ("folderInfos" in $$parsedSource) {
            $$parsedSource["folderInfos"] = $$createField4_0($$parsedSource["folderInfos"]);
        }
        return new VideoConcatRequest(/** @type {Partial<VideoConcatRequest>} */($$parsedSource));
    }
}

/**
 * VideoConcatResult 视频拼接结果
 */
export class VideoConcatResult {
    /**
     * Creates a new VideoConcatResult instance.
     * @param {Partial<VideoConcatResult>} [$$source = {}] - The source object to create the VideoConcatResult.
     */
    constructor($$source = {}) {
        if (!("index" in $$source)) {
            /**
             * @member
             * @type {number}
             */
            this["index"] = 0;
        }
        if (!("fileName" in $$source)) {
            /**
             * @member
             * @type {string}
             */
            this["fileName"] = "";
        }
        if (!("filePath" in $$source)) {
            /**
             * @member
             * @type {string}
             */
            this["filePath"] = "";
        }
        if (!("size" in $$source)) {
            /**
             * @member
             * @type {string}
             */
            this["size"] = "";
        }
        if (!("seconds" in $$source)) {
            /**
             * @member
             * @type {number}
             */
            this["seconds"] = 0;
        }
        if (!("status" in $$source)) {
            /**
             * @member
             * @type {string}
             */
            this["status"] = "";
        }
        if (!("progress" in $$source)) {
            /**
             * @member
             * @type {string}
             */
            this["progress"] = "";
        }

        Object.assign(this, $$source);
    }

    /**
     * Creates a new VideoConcatResult instance from a string or object.
     * @param {any} [$$source = {}]
     * @returns {VideoConcatResult}
     */
    static createFrom($$source = {}) {
        let $$parsedSource = typeof $$source === 'string' ? JSON.parse($$source) : $$source;
        return new VideoConcatResult(/** @type {Partial<VideoConcatResult>} */($$parsedSource));
    }
}

// Private type creation functions
const $$createType0 = $Create.Array($Create.Any);
const $$createType1 = FolderInfo.createFrom;
const $$createType2 = $Create.Array($$createType1);
