declare namespace CLOUDNEW {
    interface CloudNewReactContent {
        treeData: DataNode[]
        setTreeData: React.Dispatch<React.SetStateAction<DataNode[]>>
        selectedKeys: React.Key[]
        setSelectedKeys: React.Dispatch<React.SetStateAction<React.Key[]>>
        queryFormFolder: CLOUDNEW.GetFolderListProps
        setQueryFormFolder: React.Dispatch<React.SetStateAction<CLOUDNEW.GetFolderListProps>>
        breadcrumdData: CLOUDNEW.BreadcrumdData[]
        setBreadcrumdData: React.Dispatch<React.SetStateAction<CLOUDNEW.BreadcrumdData[]>>
        loadedKeys: string[]
        setLoadedKeys: React.Dispatch<React.SetStateAction<string[]>>
        findParentKeys: (key: string, tree: DataNode[]) => void,
        handleUpdateFolder: (parentIdStr: string) => Promise<void>
        expandedKeys: React.Key[]
        setExpandedKeys: React.Dispatch<React.SetStateAction<React.Key[]>>
        folderCreateBy: number | undefined
        setFolderCreateBy: React.Dispatch<React.SetStateAction<number | undefined>>
        batchFolderVisible: boolean
        setBatchFolderVisible: React.Dispatch<React.SetStateAction<boolean>>
        handleType: "folder" | "file"
        setHandleType: React.Dispatch<React.SetStateAction<"folder" | "file">>
        materialParams: GetMaterialListProps
        setMaterialParams: React.Dispatch<React.SetStateAction<GetMaterialListProps>>
        dragging: any
        setDragging: React.Dispatch<any>
    }
    interface SearchProps {
        searchType: "file" | "folder";
        keyword?: string;
    }
    interface BreadcrumdData {
        label: string
        key: number,
        currentKey: string
    }
    interface GetFolderListProps {
        folderName?: string
        parentId?: number
    }
    interface AddFolderProps {
        folderName: string    // 文件夹名称
        isPublic: boolean,    // 是否公开
        description?: string  // 备注
        id?: number,
        parentId?: number,     // 上层文件夹ID
        permissionUserId?: number[]  // 指定人员可见
    }
    interface GetMaterialListProps {
        pageNum: number,
        pageSize: number,
        designerIds?: number[]  // 设计师
        folderId?: number       // 文件夹
        height?: number
        width?: number
        materialName?: string   // 素材名称
        materialType?: string   // 素材类型
        sizeQueries?: { width?: number, height?: number, relation: string }[]
    }
    interface GetMaterialDataListProps {
        pageNum: number,
        pageSize: number,
        columns?: string[]              // 列
        accountIds?: number[]          // 广告账号
        adgroupIds?: number[]          // 广告id
        dynamicCreativeIds?: number[]  // 创意id
        sysUserIds?: number[]    // 投手id
        designerIds?: number[]  // 设计师
        folderId?: number       // 文件夹
        materialName?: string   // 素材名称
        materialType?: string   // 素材类型
        mediaType?: string
        minCost?: number,       // 最小消耗
        sizeQueries?: { width?: number, height?: number, relation: string }[]
        sortField?: string,
        sortType?: boolean,
        tencentMaterialId?: number[]  // 腾讯素材id
        uploadTimeMin?: string        // 图片上传时间
        uploadTimeMax?: string
        useStatus?: number            // 使用情况（0未使用 1无消耗 2有消耗）
        fileSize?: number
        sizeList?: string[]
    }
    interface GetPageRemoteImageDataListProps {
        materialType: 'image' | 'video'   // 素材类型
        pageNum: number,
        pageSize: number,
        columns?: string[]              // 列
        accountIds?: number[]          // 广告账号
        adgroupIds?: number[]          // 广告id
        dynamicCreativeIds?: number[]  // 创意id
        sysUserIds?: number[]    // 投手id
        mediaType?: string
        minCost?: number,       // 最小消耗
        sizeQueries?: { width?: number, height?: number, relation: string }[]
        sortField?: string,
        sortType?: boolean,
        tencentMaterialId?: number[]  // 腾讯素材id
        uploadTimeMin?: string        // 图片上传时间
        uploadTimeMax?: string
        useStatus?: number            // 使用情况（0未使用 1无消耗 2有消耗）
        fileSize?: number
        fileFormat?: '1' | '2'   // 文件版式 1横版(宽大于高)  2竖版(高大于宽) 3方图(高等于宽)")
        sizeList?: string[]
    }
    interface AddMaterialProps {
        designerId?: number,    // 设计师
        fileMime?: string,
        fileSize?: number,
        height?: number,
        width?: number,
        materialName?: string,  // 素材名称
        materialType?: string,  // 素材类型
        md5?: string,
        ossUrl?: string,        // 链接地址
        folderId?: number,     // 文件夹ID  
        aspectRatio?: number,  // 素材比率
        description?: string,  // 描述
        videoDuration?: number, // 视频时长
        file?: any
    }
    interface UpdateMaterialProps {
        folderId?: number,     // 文件夹ID  
        id: number,
        materialName: string,  // 素材名称
        description?: string,  // 描述
    }
    interface GetCreativeReport {
        pageNum: number,
        pageSize: number,
        signature?: string,
        creativeTimeMin?: string,  // 创意创建时间
        creativeTimeMax?: string,
        dataTimeMix?: string,      // 素材数据时间
        dataTimeMax?: string,
        mediaType?: string,        // 	媒体类型
        sortField?: string,
        sortType?: boolean
    }
    type SizeQueriesProps = {
        width?: number,
        height?: number,
        relation: string
    }
    type DefaultParams = {
        sizeQueries?: SizeQueriesProps[],
        materialType: 'image' | 'video'
        fileSize: number
    }
    interface SelectCloudNewProps {
        defaultParams: DefaultParams
        num: number
        sliderImgContent?: { oss_url: string, id: number, width?: number, height?: number }[]
        isGroup?: boolean
        visible?: boolean
        onClose?: () => void
        onChange?: (data: any[]) => void
        accountCreateLogs?: PULLIN.AccountCreateLogsProps[]
        putInType?: 'NOVEL' | 'GAME'
        componentCount?: number
        deliveryMode?: string
        title?: string
    }
    interface MediaListProps {
        defaultParams: DefaultParams
        num: number,
        active: number | undefined
        checkedFolderList: any[]
        setCheckedFolderList: React.Dispatch<React.SetStateAction<any[]>>
        uploadVisible: boolean
        setUploadVisible: React.Dispatch<React.SetStateAction<boolean>>
    }
    interface SelectGroupCloudNewProps {
        num: number
        defaultParams: DefaultParams
        checkedFolderList: any[]
        setCheckedFolderList: React.Dispatch<React.SetStateAction<any[]>>
        active: number | undefined
        accountCreateLogs?: PULLIN.AccountCreateLogsProps[]
        putInType?: 'NOVEL' | 'GAME'
    }
    interface GetRemoteMaterialListProps {
        pageNum: number,
        pageSize: number,
        columns?: string[],
        materialType?: string,
        sortField?: string,
        sortType?: boolean
    }

    interface AddRemoteMaterialProps {
        aspectRatio: string
        description: string
        designerId: number
        fileSize: number
        height: number
        width: number
        materialName: string
        materialType: string
        md5: string
        url: string
    }

    interface SetMaterialTencentProps {
        accountId: number
        sysFileId: number[]
        type: 'IMAGE' | 'VIDEO'
    }
}