-- you can use your own month names and so on; even if you change
-- the length of the year the code will adapt

local days = {
	'Day of the Frozen River'; 'Day of Fell Shadow';
	'Day of Peaceful Splendor'; 'Day of Somber Reflection'; 
	'Day of Wrathful Visitation'; 'Day of Wistful Remembrance';
	'Day of the Warm Hearth'; 'Day of Joyous Worship';
	'Day of the Fond Farewell';
}

local weeks = {
	"Merchant's Week"; "Chandler's Week"; "Miller's Week";
	"Bard's Week"; "Cobbler's Week";
}

local moons = {
	'Splendormoon';
	'Embermoon';
	'Saddlemoon';
	'Candlemoon';
	'Cindermoon';
	'Diremoon';
	'Chancelmoon';
	'Starmoon';
	'Harvestmoon';
}

local yearadj = {
	'Whimpering';
	'Overturned';
	'Silent';
	'Whimsical';
	'Turbulent';
	'Parsimonius';
	'Rhadamanthine';
	'Exuberant';
	'Winsome';
	'Bifurcated';
}

local yearnoun = {
	'Princeling';
	'Applecart';
	'Oxcart';
	'Parsnip';
	'Lotus';
	'Daffodil';
}

local yg = function(y)
	local pos = -3
	local neg = y < 0
	y = tostring(math.abs(y))
	local n = ''
	while true do
		local w = string.sub(y,pos,pos+2)
		if w == nil or w == '' then break end 
		n = w .. ',' .. n
		pos = pos - 3
	end
	if neg then n = '-' .. n end
	return string.sub(n,1,-2)
end

return {
	days_per_stellar_cycle = 17;
	default = 'imperial';
	styles = {
		imperial = {
			name = 'Imperial Archipelagian Calendar';
			days = days, weeks = weeks, moons = moons;
			longdate = function(date)
				local day  = days [date.day_of_week ]
				local week = weeks[date.week_of_moon]
				local moon = moons[date.moon_of_year]
				return string.format('%s on %s in %s after %s years of the Imperial Revolution',day,week,moon,yg(date.year))
			end;
			shortdate = function(date)
				return string.format('%u/%u %s I.R.', date.day_of_moon, date.moon_of_year, yg(date.year))
			end;
		}
	}
}
