










ll := import("@platforma-sdk/workflow-tengo:ll")
smart := import("@platforma-sdk/workflow-tengo:smart")
validation := import("@platforma-sdk/workflow-tengo:validation")

json := import("json")





RTYPE_BLOB_IMPORT_EXTERNAL := { Name: "BlobImportExternal", Version: "1" }
RTYPE_BLOB_IMPORT_INTERNAL := { Name: "BlobImportInternal", Version: "1" }
RTYPE_BLOB_UPLOAD := { Name: "BlobUpload", Version: "1" }
RTYPE_BLOB_DOWNLOAD := { Name: "BlobDownload", Version: "2" }







createBlobImportExternal := func(settings) {
	validation.assertType(settings, {
		"dataURL": "string",
		"dataHeaders,?": [["string"]],
		"dataVersion,?": "string"
	})

	importer := smart.structBuilder(RTYPE_BLOB_IMPORT_EXTERNAL, json.encode(settings)).lockAndBuild()

	return ll.toStrict({
		file: importer.getField("blob"),
		handle: importer.getField("handle")
	})
}







createBlobImportInternal := func(settings) {
	validation.assertType(settings, {
		"path": "string",
		"storageId": "string",
		"maxSpeedBytes,?": "number",
		"dataVersion,?": "string"
	})

	importer := smart.structBuilder(RTYPE_BLOB_IMPORT_INTERNAL, json.encode(settings)).lockAndBuild()

	return ll.toStrict({
		file: importer.getField("blob"),
		handle: importer.getField("handle")
	})
}







createBlobUpload := func(settings) {
	validation.assertType(settings, {
		"modificationTime": "string",
		"localPath": "string",
		"pathSignature": "string",
		"sizeBytes": "string"
	})

	uploader := smart.structBuilder(RTYPE_BLOB_UPLOAD, json.encode(settings)).lockAndBuild()

	return ll.toStrict({
		file: uploader.getField("blob"),
		handle: uploader.getField("handle")
	})
}

export ll.toStrict({
	RTYPE_BLOB_IMPORT_EXTERNAL      : RTYPE_BLOB_IMPORT_EXTERNAL,
	RTYPE_BLOB_IMPORT_INTERNAL      : RTYPE_BLOB_IMPORT_INTERNAL,
	RTYPE_BLOB_UPLOAD               : RTYPE_BLOB_UPLOAD,
	RTYPE_BLOB_DOWNLOAD             : RTYPE_BLOB_DOWNLOAD,

	createBlobImportExternal        : createBlobImportExternal,
	createBlobImportInternal        : createBlobImportInternal,
	createBlobUpload                : createBlobUpload
})
