import request from '@/utils/request'

/**
 * 获取sketch的画布详情
 * @param data 获取sketch的画布详情的参数
 * @param data.id sketch id
 * @returns 获取sketch的画布详情
 */
export interface getSketchFlowCanvasData {
	id: string
}
export const getSketchFlowCanvas = (data:getSketchFlowCanvasData,loading?:boolean) => {
	return request({
		url: `/api/canvas/detail/${data.id}`,
		method: 'get',
		loading
	})
}

/**
 * 保存或者更新sketch的画布详情
 * @param data 获取sketch的画布详情的参数
 * @param data.id sketch id
 * @param data.canvasData sketch id
 * @returns 获取sketch的画布详情
 */
export interface saveSketchFlowCanvasData {
	id?: string
	canvasData: string
}
export const putSketchFlowCanvas = (data:saveSketchFlowCanvasData,loading?:boolean) => {
	return request({
		url: `/api/canvas/detail/${data.id}`,
		method: 'put',
		headers: {
			'Content-Type': 'application/json'
		},
		data: data.canvasData,
		loading
	})
}

/**
 * 删除sketch和画布详情
 * @param data 删除sketch的画布详情的参数
 * @param data.id sketch id
 * @param data.versionNodeId 节点id
 * @returns 获取sketch的画布详情
 */
export interface deleteSketchFlowCanvasData {
	id?: string
	versionNodeId?: string
}
export const deleteSketchFlowCanvas = (data:deleteSketchFlowCanvasData) => {
	return request({
		url: `/api/canvas/detail/${data.versionNodeId}/${data.id}`,
		method: 'delete',
	})
}

/**
 * 根据taskId查询结果
 * @param data 根据taskId查询结果的参数
 * @param data.taskIds taskIds列表
 * @returns 根据taskId查询结果
 */
export interface taskIdList {
	taskIds?: Array<string>
}
export const getTaskidResult = (data:taskIdList) => {
	return request({
		url: `/api/image/tasks/batch`,
		method: 'post',
		data: {
			taskIds: data.taskIds
		}
	})
}

/**
 * 图片转真是风格
 * @param data 图片转真是风格的参数
 * @param data.sketchId sketch id
 * @param data.imageUrl 进行生成的图片。minio地址和正常地址都可以
 * @param data.mode 选择的模型
 * @param data.size 生成图片的大小
 * @param data.userPrompt 生成图片的提示词
 * @returns 图片转真是风格
 */
export interface toRealStyleData {
	sketchId?: string
	imageUrl?: string
	mode?: string
	size?: string
	userPrompt?: string
}
export const toRealStyleApi = (data:toRealStyleData) => {
	return request({
		url: `/api/image/to-real-style`,
		method: 'post',
		data:{
			sketchId: data.sketchId,
			imageUrl: data.imageUrl,
			mode: data.mode,
			size: data.size,
			userPrompt: data.userPrompt
		}
	})
}
/**
 * 图片转真是风格-变体
 * @param data 图片转真是风格-变体的参数
 * @param data.sketchId sketch id
 * @param data.imageUrl 进行生成的图片。minio地址和正常地址都可以
 * @param data.mode 选择的模型
 * @param data.size 生成图片的大小
 * @param data.userPrompt 生成图片的提示词
 * @param data.original3dUrl 原始3d模型的url
 * @returns 图片转真是风格
 */
export interface toRealStyleData {
	sketchId?: string
	imageUrl?: string
	mode?: string
	size?: string
	userPrompt?: string
	original3dUrl?: string
}
export const toRealVariantsApi = (data:toRealStyleData) => {
	return request({
		url: `/api/image/to-real-variants`,
		method: 'post',
		data:{
			sketchId: data.sketchId,
			imageUrl: data.imageUrl,
			mode: data.mode,
			size: data.size,
			userPrompt: data.userPrompt,
			original3dUrl: data.original3dUrl,
		}
	})
}
/**
 * 线稿图上色
 * @param data 线稿图上色的参数
 * @param data.sketchId sketch id
 * @param data.imageUrl 进行生成的图片。minio地址和正常地址都可以
 * @param data.variantCount 生成图片的数量
 * @param data.colors 生成上色的图片颜色列表
 * @param data.mode 选择的模型
 * @returns 线稿图上色
 */
export interface toColorPaletteData {
	sketchId?: string
	imageUrl?: string
	variantCount?: string
	colors?: Array<string>
	mode?: string
}
export const toColorPaletteApi = (data:toColorPaletteData) => {
	return request({
		url: `/api/image/color-palette`,
		method: 'post',
		data:{
			sketchId: data.sketchId,
			imageUrl: data.imageUrl,
			variantCount: data.variantCount,
			colors: data.colors,
			mode: data.mode,
		}
	})
}

/**
 * 场景构图
 * @param data 场景构图的参数
 * @param data.sketchId sketch id
 * @param data.imageUrl 进行生成的图片。minio地址和正常地址都可以
 * @param data.styles 生成上色的图片颜色列表
 * @param data.userPrompt 生成上色的图片颜色列表
 * @param data.mode 选择的模型
 * @returns 场景构图
 */
export interface toSceneCompositionData {
	sketchId?: string
	imageUrl?: string
	userPrompt?: string
	styles?: Array<string>
	mode?: string
}
export const toSceneCompositionApi = (data:toSceneCompositionData) => {
	return request({
		url: `/api/image/scene-composition`,
		method: 'post',
		data:{
			sketchId: data.sketchId,
			imageUrl: data.imageUrl,
			userPrompt: data.userPrompt,
			styles: data.styles,
			mode: data.mode,
		}
	})
}

/**
 * 线稿贴印花
 * @param data 线稿贴印花的参数
 * @param data.sketchId sketch id
 * @param data.imageUrl 进行生成的图片。minio地址和正常地址都可以
 * @param data.styles 生成上色的图片颜色列表
 * @param data.userPrompt 生成上色的图片颜色列表
 * @param data.mode 选择的模型
 * @returns 线稿贴印花
 */
export interface sketchAddPrintData {
	sketchId?: string
	imageUrl?: string
	surFaceUrl?: string
	userPrompt?: string
	mode?: string
}
export const sketchAddPrintApi = (data:sketchAddPrintData) => {
	return request({
		url: `/api/image/surface-edit`,
		method: 'post',
		data:{
			sketchId: data.sketchId,
			imageUrl: data.imageUrl,
			userPrompt: data.userPrompt,
			surFaceUrl: data.surFaceUrl,
			mode: data.mode,
		}
	})
}

/**
 * 图片转3d
 * @param data 图片转3d的参数
 * @param data.sketchId sketch id
 * @param data.imageUrls 进行生成的图片。minio地址和正常地址都可以
 * @param data.mode 选择的模型
 * @returns 图片转3d
 */
export interface sketchToThreeData {
	sketchId?: string
	imageUrls?: Array<string>
	mode?: string
}
export const sketchToThreeApi = (data:sketchToThreeData) => {
	return request({
		url: `/api/image/img-to-3d`,
		method: 'post',
		data:{
			sketchId: data.sketchId,
			imageUrls: data.imageUrls,
			mode: data.mode,
		}
	})
}

/**
 * 3d模型转3视图
 * @param data 3d模型转3视图的参数
 * @param data.sketchId sketch id
 * @param data.glbUrl 生成的3d模型地址
 * @returns 3d模型转3视图
 */
export interface threeToThreeViewsData {
	sketchId?: string
	glbUrl?: string
}
export const threeToThreeViewsApi = (data:threeToThreeViewsData) => {
	return request({
		url: `/api/image/glb-to-3views`,
		method: 'post',
		data:{
			sketchId: data.sketchId,
			glbUrl: data.glbUrl,
		}
	})
}

/**
 * 根据sketchId更新VersionNode的sketch的URL值
 * @param data 根据sketchId更新VersionNode的sketchL值的参数
 * @param data.sketchId sketch id
 * @param data.newUrl 生成的3d模型地址
 * @returns 根据sketchId更新VersionNode的sketch的URL值
 */
export interface threeToThreeViewsData {
	sketchId?: string
	newUrl?: string
}
export const updateVersionSketchUrlApi = (data:threeToThreeViewsData) => {
	return request({
		url: `/api/canvas/sketchIdAndUrl/${data.sketchId}`,
		method: 'put',
		data:{
			newUrl: data.newUrl,
		}
	})
}
