셀프등록 로직

const puppeteer = require('puppeteer');

const ID = 'max444';
const PASSWORD = 'dldmswk!12';

const selfRegister = async (carNumber) => {
	const browser = await puppeteer.launch({ headless: false, slowMo: 30 });
	const page = await browser.newPage();
	await page.on('dialog', async (dialog) => {
		if (dialog.type() === 'alert') {
			await dialog.dismiss();
		}
		if (dialog.type() === 'confirm') {
			await dialog.accept();
		}
	});
	await page.setViewport({ width: 1500, height: 1000 });
	await page.goto('<http://qa132.encar.io/login?backpath=http%3A%2F%2Fqa5.encar.io%3A81%2Fsl%2Fsl_index.do>');
	await page.waitForSelector('#id', { timeout: 10000 });
	await page.type('#id', ID);
	await page.type('#password', PASSWORD);
	await page.evaluate(() => document.querySelectorAll('button')[2].click());
	await page.waitForNavigation();
	const goApply = await page.waitForSelector('.link_apply', { timeout: 10000 });
	await goApply.click();
	await page.waitForSelector('#carNo', { timeout: 10000 });
	await page.evaluate(() => document.getElementById('carNo').value = '');
	await page.type('#carNo', carNumber);
	await page.click('#agree');
	await page.click('#chkBtn');

	try {
		await page.waitForSelector('.numerror_pp.on', { timeout: 500 });
		const message = await page.evaluate(() => document.querySelectorAll('#numerror_div dl dt')[0].textContent);
		browser.close();
		return {
			status: 'error',
			message,
		};
	} catch (e) {
		console.log('Find Car!');
	}

	// 차량정보 페이지
	await page.waitForSelector('#divmnfc');
	const offManufacturer = await page.$('.rs_manuf.off');
	if (offManufacturer) {
		await page.click('#chkmnfc');
		await page.waitForSelector('#formnfcUl a');
		await page.evaluate(() => document.querySelectorAll('#formnfcUl a')[0].click());
	}
	const offModelGroup = await page.$('.rs_ser.off');
	if (offModelGroup) {
		await page.click('#chkmdlgroup');
		await page.waitForSelector('#mdlgroupUl a');
		await page.evaluate(() => document.querySelectorAll('#mdlgroupUl a')[0].click());
	}
	const model = await page.waitForSelector('#chkmdl');
	await model.click();
	await page.waitForSelector('#mdlUl a');
	await page.evaluate(() => document.querySelectorAll('#mdlUl a')[0].click());

	const offBadge = await page.$('.rs_grade.off');
	if (offBadge) {
		await page.click('#chkclshead');
		await page.waitForSelector('#clsheadUl a');
		await page.evaluate(() => document.querySelectorAll('#clsheadUl a')[0].click());
	}
	const offBadgeDetail = await page.$('.rs_grade2.off');
	if (offBadgeDetail) {
		try {
			await page.click('#chkclsdetail');
			await page.waitForSelector('#clsdetailUl a');
			await page.evaluate(() => document.querySelectorAll('#clsdetailUl a')[0].click());
		} catch (e) {
			console.log('No exist badge detail case');
		}
	}
	const offYear = await page.$('.rs_year.off');
	if (offYear) {
		await page.click('#chkyear');
		await page.waitForSelector('#yearUl a');
		await page.evaluate(() => document.querySelectorAll('#yearUl a')[1].click());
		await page.evaluate(() => document.querySelectorAll('#monthUl a')[1].click());
	}
	const offYear2 = await page.$('.rs_year2.off');
	if (offYear2) {
		await page.click('#chkkidiyear');
		await page.waitForSelector('#kidiyearUl a');
		await page.evaluate(() => document.querySelectorAll('#kidiyearUl a')[1].click());
	}
	try {
		await page.waitForSelector('#divtrns.ok', { timeout: 2000 });
	} catch (e) {
		await page.type('#dsp', '2000');
		await page.click('#chktrns');
		await page.waitForSelector('#trnsUl_001');
		await page.click('#trnsUl_001');
	}
	await page.click('#chkcolor');
	await page.click('#color_0');
	await page.type('#mlg', '30000');
	await page.click('#submitOK');

	// 옵션 페이지
	try {
		await page.waitForSelector('#uiLayerCoach');
		await page.evaluate(() => document.querySelector('#uiLayerCoach .btn_confirm').click(), { timeout: 300 });
	} catch (e) {
		console.log('no coach');
	}
	try {
		await page.waitForSelector('#uiLayerCoach2', { timeout: 500 });
		await page.evaluate(() => document.querySelector('#uiLayerCoach2 .btn_confirm').click(), { timeout: 300 });
	} catch (e) {
		console.log('no coach2');
	}
	await page.waitForSelector('.btn_sure');
	try {
		await page.click('.btn_sure');
	} catch (e) {
		console.log('no popup');
	}
	await page.click('#btn_next');

	// 가격 설명글 페이지
	await page.waitForSelector('#mphnyn');
	await page.click('#mphnyn');
	await page.type('#dmndprc', '7700');
	await page.type('#crmm', '매크로에 의해 셀프등록된 매물입니다.');
	await page.evaluate(() => document.querySelectorAll('.submit')[2].click());

	// 성능점검 페이지
	await page.waitForSelector('#inspecnum');
	await page.evaluate(() => document.getElementById('inspecnum').value = '');
	await page.type('#inspecnum', '123123');
	await page.type('#recordno1', '12');
	await page.type('#recordno2', '12');
	await page.type('#recordno3', '123');
	await page.evaluate(() => document.getElementById('validity1').value = '20200401');
	await page.evaluate(() => document.getElementById('validity2').value = '20210401');
	await page.click('#firstregdtDaydiv .selectric');
	await page.waitForSelector('#firstregdtDaydiv .selectric-items');
	await page.evaluate(() => document.querySelectorAll('#firstregdtDaydiv .selectric-items li')[1].click());
	await page.type('#carregistration', '123123');
	await page.type('#motorType', '123123');
	await page.type('#mlg', '12000');
	try {
		await page.type('#smout', '5', { timeout: 300 });
	} catch (e) {
		await page.type('#coout', '5', { timeout: 300 });
		await page.type('#hcout', '5', { timeout: 300 });
	}
	await page.click('#issuedtDaydiv .selectric');
	await page.waitForSelector('#issuedtDaydiv .selectric-items');
	await page.evaluate(() => document.querySelectorAll('#issuedtDaydiv .selectric-items li')[1].click());
	await page.type('#inspNm', '김점검');
	await page.type('#noticeNm', '김고지');
	await page.click('#submitOK');

	// 사진 페이지
	await page.waitForSelector('.btn_guide_close');
	await page.click('.btn_guide_close');
	await page.click('.notify_close');
	await page.click('.btn_edit_prev');

	// 결제
	await page.waitForSelector('.btn_payment button');
	await page.click('.btn_payment button');

	browser.close();

	return {
		ok: true,
	};
};

module.exports = selfRegister;