'use strict'

const m = {
	nationalExp: {
		bitmask: 1,
		name: 'InterCityExpress',
		short: 'ICE',
		mode: 'train',
		product: 'nationalExp'
	},
	national: {
		bitmask: 2,
		name: 'InterCity & EuroCity',
		short: 'IC/EC',
		mode: 'train',
		product: 'national'
	},
	regionalExp: {
		bitmask: 4,
		name: 'InterRegio',
		short: 'IR',
		mode: 'train',
		product: 'regionalExp'
	},
	regional: {
		bitmask: 8,
		name: 'RegionalExpress & Regio',
		short: 'RE/RB',
		mode: 'train',
		product: 'regional'
	},
	suburban: {
		bitmask: 16,
		name: 'S-Bahn',
		short: 'S',
		mode: 'train',
		product: 'suburban'
	},
	bus: {
		bitmask: 32,
		name: 'Bus',
		short: 'B',
		mode: 'bus',
		product: 'bus'
	},
	ferry: {
		bitmask: 64,
		name: 'Ferry',
		short: 'F',
		mode: 'ferry',
		product: 'ferry'
	},
	subway: {
		bitmask: 128,
		name: 'U-Bahn',
		short: 'U',
		mode: 'train',
		product: 'subway'
	},
	tram: {
		bitmask: 256,
		name: 'Tram',
		short: 'T',
		mode: 'tram',
		product: 'tram'
	},
	taxi: {
		bitmask: 512,
		name: 'Group Taxi',
		short: 'Taxi',
		mode: null, // todo
		product: 'taxi'
	},
	unknown: {
		bitmask: 0,
		name: 'unknown',
		short: '?',
		product: 'unknown'
	}
}

m.bitmasks = []
m.bitmasks[1] = m.nationalExp
m.bitmasks[2] = m.national
m.bitmasks[4] = m.regionalExp
m.bitmasks[8] = m.regional
m.bitmasks[16] = m.suburban
m.bitmasks[32] = m.bus
m.bitmasks[64] = m.ferry
m.bitmasks[128] = m.subway
m.bitmasks[256] = m.tram
m.bitmasks[512] = m.taxi

// todo: move up
m.stringifyBitmask = (products) => {
	let bitmask = 0
	for (let product in products) {
		if (products[product] === true) bitmask += m[product].bitmask
	}
	return bitmask
}

// todo: move up
m.parseBitmask = (bitmask) => {
	let products = {}, i = 1
	do {
		products[m.bitmasks[i].product] = !!(bitmask & i)
		i *= 2
	} while (m.bitmasks[i] && m.bitmasks[i].product)
	return products
}

module.exports = m