import * as $protobuf from "protobufjs";
import Long = require("long");
/** Properties of a Model. */
export interface IModel {

    /** Model chunks */
    chunks?: (IChunk[]|null);

    /** Model createAt */
    createAt?: (number|null);

    /** Model description */
    description?: (string|null);
}

/** Represents a Model. */
export class Model implements IModel {

    /**
     * Constructs a new Model.
     * @param [properties] Properties to set
     */
    constructor(properties?: IModel);

    /** Model chunks. */
    public chunks: IChunk[];

    /** Model createAt. */
    public createAt: number;

    /** Model description. */
    public description: string;

    /**
     * Decodes a Model message from the specified reader or buffer.
     * @param reader Reader or buffer to decode from
     * @param [length] Message length if known beforehand
     * @returns Model
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): Model;

    /**
     * Gets the default type url for Model
     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
     * @returns The default type url
     */
    public static getTypeUrl(typeUrlPrefix?: string): string;
}

/** Properties of a Chunk. */
export interface IChunk {

    /** Chunk vertices */
    vertices: IVertices;

    /** Chunk faces */
    faces: IFaces;

    /** Chunk name */
    name: string;

    /** Chunk texture */
    texture?: (string|null);
}

/** Represents a Chunk. */
export class Chunk implements IChunk {

    /**
     * Constructs a new Chunk.
     * @param [properties] Properties to set
     */
    constructor(properties?: IChunk);

    /** Chunk vertices. */
    public vertices: IVertices;

    /** Chunk faces. */
    public faces: IFaces;

    /** Chunk name. */
    public name: string;

    /** Chunk texture. */
    public texture: string;

    /**
     * Decodes a Chunk message from the specified reader or buffer.
     * @param reader Reader or buffer to decode from
     * @param [length] Message length if known beforehand
     * @returns Chunk
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): Chunk;

    /**
     * Gets the default type url for Chunk
     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
     * @returns The default type url
     */
    public static getTypeUrl(typeUrlPrefix?: string): string;
}

/** Properties of a Vertices. */
export interface IVertices {

    /** Vertices xyz */
    xyz?: (number[]|null);

    /** Vertices uvs */
    uvs?: (number[]|null);

    /** Vertices marks */
    marks?: (VertexMark[]|null);
}

/** Represents a Vertices. */
export class Vertices implements IVertices {

    /**
     * Constructs a new Vertices.
     * @param [properties] Properties to set
     */
    constructor(properties?: IVertices);

    /** Vertices xyz. */
    public xyz: number[];

    /** Vertices uvs. */
    public uvs: number[];

    /** Vertices marks. */
    public marks: VertexMark[];

    /**
     * Decodes a Vertices message from the specified reader or buffer.
     * @param reader Reader or buffer to decode from
     * @param [length] Message length if known beforehand
     * @returns Vertices
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): Vertices;

    /**
     * Gets the default type url for Vertices
     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
     * @returns The default type url
     */
    public static getTypeUrl(typeUrlPrefix?: string): string;
}

/** Properties of a Faces. */
export interface IFaces {

    /** Faces indices */
    indices?: (number[]|null);

    /** Faces normals */
    normals?: (number[]|null);
}

/** Represents a Faces. */
export class Faces implements IFaces {

    /**
     * Constructs a new Faces.
     * @param [properties] Properties to set
     */
    constructor(properties?: IFaces);

    /** Faces indices. */
    public indices: number[];

    /** Faces normals. */
    public normals: number[];

    /**
     * Decodes a Faces message from the specified reader or buffer.
     * @param reader Reader or buffer to decode from
     * @param [length] Message length if known beforehand
     * @returns Faces
     * @throws {Error} If the payload is not a reader or valid buffer
     * @throws {$protobuf.util.ProtocolError} If required fields are missing
     */
    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): Faces;

    /**
     * Gets the default type url for Faces
     * @param [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
     * @returns The default type url
     */
    public static getTypeUrl(typeUrlPrefix?: string): string;
}

/** VertexMark enum. */
export enum VertexMark {
    VERTEX_MARK_UNSPECIFIED = 0,
    VERTEX_MARK_ROOF = 1
}
