import { SharedContracts } from './shared-contracts';

export namespace AssetContracts {
    export interface IAssetModelContract {
        id: string;
        file_name: string;
        title: string;
        image_width: number | null;
        image_height: number | null;
        size: number;
        type: string;
        file_reference: IAssetFileReferenceContract;
        descriptions: IAssetFileDescriptionContract[];
        external_id: string;
        last_modified: string;
        url: string;
        codename: string;
        collection?: IAssetCollectionReferenceContract;
        folder?: IAssetFolderReferenceContract;
        elements?: IAssetElement[];
    }

    export interface IAssetElement {
        element: SharedContracts.IIdReferenceContract;
        value: SharedContracts.IIdReferenceContract[];
    }

    export interface IAssetFileReferenceContract  {
        id: string;
        type: 'internal';
    }

    export interface IAssetFolderReferenceContract {
        id?: string;
        external_id?: string;
    }

    export interface IAssetFileDescriptionContract {
        language: SharedContracts.IReferenceObjectContract;
        description: string;
    }

    export interface IAssetCollectionReferenceContract {
        reference: SharedContracts.IReferenceObjectContract | null;
    }

    export interface IAssetsListingResponseContract {
        assets: IAssetModelContract[];
        pagination: SharedContracts.IPaginationModelContract;
    }

    export interface IUploadBinaryFileResponseContract extends IAssetFileReferenceContract {
    }

    export interface IAddAssetResponseContract extends IAssetModelContract {
    }

    export interface IUpdateAssetResponseContract extends IAssetModelContract {
    }

    export interface IUpsertAssetResponseContract extends IAssetModelContract {
    }

    export interface IDeleteAssetResponseContract {
    }
}


