import '@johnlindquist/kit';
import falso from '@ngneat/falso';
let counts = 1;
const randZodiacSign = () => {
	const zodiacSigns = [
		'Aries',
		'Taurus',
		'Gemini',
		'Cancer',
		'Leo',
		'Virgo',
		'Libra',
		'Scorpio',
		'Sagittarius',
		'Capricorn',
		'Aquarius',
		'Pisces',
	];
	return falso.rand(zodiacSigns);
};
const person = [
	{
		name: 'Full Name',
		value: () => falso.randFullName(),
		description: 'The complete name of the randomly generated user.',
	},
	{
		name: 'Title',
		value: () => falso.randPersonTitle(),
		description: 'The professional title of the randomly generated user.',
	},
	{
		name: 'Email',
		value: () => falso.randEmail(),
		description: 'The email address of the randomly generated user.',
	},
	{
		name: 'Phone',
		value: () => falso.randPhoneNumber(),
		description: 'The phone number of the randomly generated user.',
	},
	{
		name: 'Address',
		value: () => falso.randAddress(),
		description: 'The physical address of the randomly generated user.',
	},
	{
		name: 'Username',
		value: () => falso.randUserName(),
		description: 'The username chosen for the randomly generated user.',
	},
	{
		name: 'Last Name',
		value: () => falso.randLastName(),
		description: 'The last name of the randomly generated user.',
	},
	{
		name: 'First_Name',
		value: () => falso.randFirstName(),
		description: 'The first name of the randomly generated user.',
	},
	{
		name: 'Gender',
		value: () => falso.randGender(),
		description: 'The gender of the randomly generated user.',
	},
	{
		name: 'Avatar',
		value: () => falso.randAvatar(),
		description: 'The profile picture (avatar) of the randomly generated user.',
	},
	{
		name: 'Pronoun',
		value: () => falso.randPronoun(),
		description: 'The preferred pronoun of the randomly generated user.',
	},
	{
		name: 'Skill',
		value: () => falso.randSkill(),
		description: 'A skill associated with the randomly generated user.',
	},
	{
		name: 'Password',
		value: () => falso.randPassword(),
		description: 'The password for the randomly generated user.',
	},
	{
		name: 'Country',
		value: () => falso.randCountry(),
		description: 'The country of residence of the randomly generated user.',
	},
	{
		name: 'City',
		value: () => falso.randCity(),
		description: 'The city of residence of the randomly generated user.',
	},
	{
		name: 'Role',
		value: () => falso.randRole(),
		description: 'The role or position held by the randomly generated user.',
	},
	{
		name: 'Company',
		value: () => falso.randCompanyName(),
		description:
			'The name of the company associated with the randomly generated user.',
	},
	{
		name: 'Subscription Plan',
		value: () => falso.randSubscriptionPlan(),
		description: 'The subscription plan chosen by the randomly generated user.',
	},
	{
		name: 'Date of Birth',
		value: () => falso.randPastDate(),
		description: 'The date of birth of the randomly generated user.',
	},
	{
		name: 'Credit Card',
		value: () => falso.randCreditCard(),
		description: 'The randomly generated credit card information of the user.',
	},
	{
		name: 'User Agent',
		value: () => falso.randUserAgent(),
		description:
			'The user agent of the device used by the randomly generated user.',
	},
	{
		name: 'IP',
		value: () => falso.randIP(),
		description: 'The randomly generated IP address of the user.',
	},
	{
		name: 'IP6',
		value: () => falso.randIP6(),
		description: 'The randomly generated IPv6 address of the user.',
	},
	{
		name: 'Zodiac Sign',
		value: () => randZodiacSign(),
		description: 'The randomly generated zodiac sign of the user.',
	},
];
const color = [
	{
		name: 'Name',
		value: () => falso.randColor(),
		description: 'Generates a random color name.',
	},
	{
		name: 'HEX',
		value: () => falso.randHex(),
		description: 'Generates a random hexadecimal color code.',
	},
	{
		name: 'HSL',
		value: () => falso.randHsl(),
		description:
			'Generates a random HSL (Hue, Saturation, Lightness) color code.',
	},
	{
		name: 'RGB',
		value: () => falso.randRgb(),
		description: 'Generates a random RGB (Red, Green, Blue) color code.',
	},
	{
		name: 'RGBa',
		value: () => falso.randRgb({ alpha: true }),
		description:
			'Generates a random RGBA (Red, Green, Blue, Alpha) color code.',
	},
];
function filterDataField(arr, field) {
	const filtered = {};
	arr.map(({ name, value }) => {
		if (field.includes(name)) {
			filtered[name] = value();
		}
	});
	return filtered;
}
function generateData({ types, fields, ...rest }) {
	const arr = [];
	for (let index = 0; index < counts; index++) {
		arr.push(filterDataField(types, fields));
	}
	setSelectedText(JSON.stringify(arr));
}
let types = await arg('Generate Random Data...', ['people', 'color']);
if (types == 'people') {
	let peopleField = await select(
		'Select a fields....',
		person
			.sort((a, b) => a.name.localeCompare(b.name))
			.map(({ name, value, description }) => ({
				name,
				description,
				value: name,
				height: PROMPT.HEIGHT.XS,
				preview: () => JSON.stringify(value()),
			})),
	);
	counts = await arg({
		description: 'How many person records you want?',
		placeholder: '1',
	});
	generateData({ types: person, fields: peopleField });
} else if (types == 'color') {
	let result = await arg(
		'Generate random color...',
		color.map(({ name, value, description }) => ({
			name,
			description,
			value: value(),
			height: PROMPT.HEIGHT.XS,
			preview: () => value(),
		})),
	);
	setSelectedText(result);
}