// #ifdef APP-ANDROID
import { selectTableData, insertTableData, updateTableData, selectJoinTableData, selectRecordData, selectRecordInfo, selectLatestInfoData, deleteTableData } from '@/utils/sqlite'
// #endif

export type Download = {
	pdid : number,
	workorder : string,
	invname : string,
	productno : string,
	graphid : string,
	cardno : string,
	processno : string,
	ver : string,
	updatetime : string,
	progress : string,
	status : number
}

export type Record = {
	sxid : number,
	senum : number,
	photoitem : string,
	productno : string,
	part : string,
	descb : string,
	date : string,
	partno : string,
	num : number,
	status : number,
	urlspl : string[],
	imgname : string[],
	urlpdt : string[]
}

export type TaskProcess = {
	id : number
	name : string
	num : number
	step : number
	status : number
}

export type JoinRecord = {
	sxid : number,
	senum : number,
	photoitem : string,
	productno : string,
	part : string,
	descb : string,
	date : string,
	partno : string,
	num : number,
	status : number,
	urlspl : string
	imgname : string,
	urlpdt : string,
	pid : number,
	workorder : string,
	invname : string
}

export type RecordCalculate = {
	photoitem : string,
	pid : number,
	step : number,
	total : number,
	status : number
}

export function offlineData(data : UTSJSONObject) : Promise<UTSJSONObject> {
	return new Promise((resolve, reject) => {
		let result = JSON.parseObject(JSON.stringify(data)) as UTSJSONObject
		resolve(result)
	});
}

export const statusDict = { '1': '未执行', '2': '执行中', '3': '已执行', '4': '执行错误', '5': '已取消' }
export const recordStatusDict = { '1': '未拍照', '2': '拍照中', '3': '拍照完成', '4': '检验不清晰', '5': '拍照取消' }

export async function getList(tableName : string, condition ?: string | null, value ?: string | null, condition2 ?: string | null, value2 ?: string | null, initData ?: UTSJSONObject | null) : Promise<UTSJSONObject> {

	// #ifdef APP-ANDROID
	const result = await selectTableData(tableName, condition, value, condition2, value2);
	console.log(result);
	return result;
	// #endif

	// #ifdef H5
	return offlineData(initData)
	// #endif
}


export async function getJoinList(dbTable : string, joinTable : string, labels : string, joinCondition : string, lname ?: string, lvalue ?: string, others ?: string) : Promise<UTSJSONObject> {

	// #ifdef APP-ANDROID
	const result = await selectJoinTableData(dbTable, joinTable, labels, joinCondition, lname, lvalue, others);
	console.log(result);
	return result;
	// #endif
}



export async function updateData(tableName : string, data : string, lname ?: string, lvalue ?: string) : Promise<UTSJSONObject> {
	// #ifdef APP-ANDROID
	const result = await updateTableData(tableName, data, lname, lvalue);
	console.log(result);
	return result;
	// #endif
}


export async function getRecordCalculate(tableName : string, value ?: string | null, initData ?: UTSJSONObject | null) : Promise<UTSJSONObject> {

	// #ifdef APP-ANDROID
	const result = await selectRecordData(tableName, value);
	console.log(result);
	return result;
	// #endif

	// #ifdef H5
	return offlineData(initData)
	// #endif
}

export async function getRecordInfoList(initData ?: UTSJSONObject | null) : Promise<UTSJSONObject> {

	// #ifdef APP-ANDROID
	const result = await selectRecordInfo();
	console.log(result);
	return result;
	// #endif

	// #ifdef H5
	return offlineData(initData)
	// #endif
}

/**
 * 保存媒体信息数据到数据库
 * @param data MediaInfoData类型的数据
 * @returns Promise<UTSJSONObject> 保存结果
 */
export async function saveMediaInfo(data ?: UTSJSONObject | null) : Promise<UTSJSONObject> {
	// #ifdef APP-ANDROID
	// 表名
	const tableName = 'app_media_info';

	// 构造插入的数据字符串，注意数据库字段名和类型
	const values = `'${data?.getString('workorder') ?? ''}','${data?.getString('invname') ?? ''}','${data?.getString('productcode') ?? ''}','${data?.getString('cardno') ?? ''}','${data?.getString('model') ?? ''}','${data?.getString('graphid') ?? ''}','${data?.getString('ver') ?? ''}','${data?.getString('phase') ?? ''}','${data?.getString('processno') ?? ''}','${data?.getString('progress') ?? ''}',${data?.getNumber('status') ?? 1},'${data?.getString('createtime') ?? ''}',${data?.getNumber('createuser') ?? 0},'${data?.getString('updatetime') ?? ''}',${data?.getNumber('updateuser') ?? 0}`;

	// 构造字段名字符串
	const fields = 'workorder,invname,productno,cardno,model,graphid,ver,phase,processno,progress,status,createtime,createuser,updatetime,updateuser';

	try {
		// 调用sqlite的插入方法
		const result = await insertTableData(tableName, values, fields);
		console.log('保存app_media_info成功:', result);
		return result;
	} catch (error) {
		console.error('保存app_media_info失败:', error);
		return { errMsg: '保存失败', data: [] as any[] } as UTSJSONObject;
	}
	// #endif

	// #ifdef H5
	return offlineData({ success: true, data: [] } as UTSJSONObject);
	// #endif
}

/**
 * 保存媒体信息数据到数据库
 * @param data saveMediaRecord类型的数据
 * @returns Promise<UTSJSONObject> 保存结果
 */
export async function saveMediaRecord(values : string) : Promise<UTSJSONObject> {
	// #ifdef APP-ANDROID
	// 表名
	const tableName = 'app_media_record';

	// 构造字段名字符串
	const fields = 'senum,photoitem,productno,part,partno,pk,exampleid,descb,num,status,date,urlspl,imgname,urlpdt,createtime,createuser,updatetime,updateuser,pid';

	try {
		// 调用sqlite的插入方法
		const result = await insertTableData(tableName, values, fields);
		console.log('保存app_media_record成功:', result);
		return result;
	} catch (error) {
		console.error('保存app_media_record失败:', error);
		return { errMsg: '保存失败', data: [] as any[] } as UTSJSONObject;
	}
	// #endif

	// #ifdef H5
	return offlineData({ success: true, data: [] } as UTSJSONObject);
	// #endif
}


export async function getLatestRecord(productNo:string , initData ?: UTSJSONObject | null) : Promise<UTSJSONObject> {
	// #ifdef APP-ANDROID
	const result = await selectLatestInfoData(productNo);
	console.log(result);
	return result;
	// #endif

	// #ifdef H5
	return offlineData({ success: true, data: [] } as UTSJSONObject)
	// #endif
}

export async function removeTableData(tableName:string, field: string, value: string) : Promise<UTSJSONObject> {
	// #ifdef APP-ANDROID

	try {
		// 调用sqlite的删除方法
		const result = await deleteTableData(tableName, field, value);
		console.log('删除数据成功:', result);
		return result;
	} catch (error) {
		console.error('删除数据失败:', error);
		return { errMsg: '删除失败', data: [] as any[] } as UTSJSONObject;
	}
	// #endif

	// #ifdef H5
	return offlineData({ success: true, data: [] } as UTSJSONObject);
	// #endif
}


export async function removeInfoAndRecord(value:string) : Promise<UTSJSONObject> {
	// #ifdef APP-ANDROID
	
	try {
		// 调用sqlite的删除方法
		const result = await deleteTableData('app_media_record', 'pid', value);
		const result2 = await deleteTableData('app_media_info', 'pdid', value);
		return result;
	} catch (error) {
		console.error('删除数据失败:', error);
		return { errMsg: '删除失败', data: [] as any[] } as UTSJSONObject;
	}
	// #endif
	
	// #ifdef H5
	return offlineData({ success: true, data: [] } as UTSJSONObject);
	// #endif
}