import {IBidTask, IBidTaskResult} from "/src-com";
import {readTabLoadedStatus} from "../lib/readTab";
import {callTabMsgMethod} from "gs-br-ext";
import {commitBidBg} from "../services/commitBidBg";

export async function executeBidTask(task: IBidTask) {
	const id = parseInt(`${task.id}`);
	if (!/^\w\d+$/.test(task.params?.goodsId)) {
		const results = {error: 'params.goodsId format error'}
		return {
			task,
			localResult: results,
			remoteResult: await commitBidBg({id, results})
		}
	}

	const taskUrl = `https://auctions.yahoo.co.jp/jp/auction/${task.params.goodsId}`;
	console.log('正在执行：', taskUrl, task)
	const existTab = await chrome.tabs.query({url: taskUrl})
	if (existTab.length) {
		const {id: tabId} = existTab[0]
		return executeToContent(task, tabId);
	}
	const {id: tabId} = await chrome.tabs.create({url: taskUrl})
	const sender: any = {tab: {id: tabId}}
	return executeToContent(task, tabId, sender);
}

async function executeToContent(task: IBidTask, tabId: number, sender?: chrome.runtime.MessageSender) {
	const id = parseInt(`${task.id}`);
	const status = await readTabLoadedStatus(tabId);
	if (status != 'complete') {
		const results = {error: 'create browser window/tab failed'}
		return {
			task,
			localResult: results,
			remoteResult: await commitBidBg({id, results}, sender)
		}
	}
	const results: IBidTaskResult['results'] = await callTabMsgMethod({
		id: tabId,
		method: 'executeBidTask',
		arg: task,
		hasReturn: true
	})
	return {
		task,
		link: `https://auctions.yahoo.co.jp/jp/show/bid_hist?aID=${task?.params?.goodsId}`,
		link2: `https://auctions.yahoo.co.jp/my/bidding`,
		localResult: results,
		remoteResult: await commitBidBg({id, results}, sender)
	};
}
