revision = 'cddcdf06d9f9'
down_revision = '6f1e9151ef83'
branch_labels = None
depends_on = None

import alembic
import sqlalchemy
import logging
import datetime
import json

def upgrade():
	storm = alembic.op.create_table("storm",
		sqlalchemy.Column("date", sqlalchemy.Date, primary_key=True),
		sqlalchemy.Column("twitch-subscription", sqlalchemy.Integer, nullable=False, server_default='0'),
		sqlalchemy.Column("twitch-resubscription", sqlalchemy.Integer, nullable=False, server_default='0'),
		sqlalchemy.Column("twitch-follow", sqlalchemy.Integer, nullable=False, server_default='0'),
		sqlalchemy.Column("twitch-message", sqlalchemy.Integer, nullable=False, server_default='0'),
		sqlalchemy.Column("patreon-pledge", sqlalchemy.Integer, nullable=False, server_default='0'),
	)

	datafile = alembic.context.config.get_section_option("lrrbot", "datafile", "data.json")
	with open(datafile) as f:
		data = json.load(f)
	try:
		alembic.op.bulk_insert(storm, [
			{'date': datetime.date.fromordinal(data['storm']['date']), 'twitch-subscription': data['storm']['count']}
		])
		del data['storm']
		with open(datafile, 'w') as f:
			json.dump(data, f, indent=2, sort_keys=True)
	except KeyError:
		pass

def downgrade():
	conn = alembic.context.get_context().bind
	meta = sqlalchemy.MetaData(bind=conn)
	meta.reflect()

	storm = meta.tables['storm']
	row = conn.execute(sqlalchemy.select([storm.c.date, storm.c['twitch-subscription']])).first()
	if row is not None:
		date, count = row

		datafile = alembic.context.config.get_section_option("lrrbot", "datafile", "data.json")
		with open(datafile) as f:
			data = json.load(f)
		data['storm'] = {
			'date': date.toordinal(),
			'count': count,
		}
		with open(datafile, 'w') as f:
			json.dump(data, f, indent=2, sort_keys=True)

	alembic.op.drop_table("storm")