import * as riot from 'riot';

import MiOS from './mios';
import ServerStreamManager from './scripts/streaming/server-stream-manager';
import RequestsStreamManager from './scripts/streaming/requests-stream-manager';
import MessagingIndexStreamManager from './scripts/streaming/messaging-index-stream-manager';
import DriveStreamManager from './scripts/streaming/drive-stream-manager';

export default (mios: MiOS) => {
	(riot as any).mixin('os', {
		mios: mios
	});

	(riot as any).mixin('i', {
		init: function() {
			this.I = mios.i;
			this.SIGNIN = mios.isSignedin;

			if (this.SIGNIN) {
				this.on('mount', () => {
					mios.i.on('updated', this.update);
				});
				this.on('unmount', () => {
					mios.i.off('updated', this.update);
				});
			}
		},
		me: mios.i
	});

	(riot as any).mixin('api', {
		api: mios.api
	});

	(riot as any).mixin('stream', { stream: mios.stream });
	(riot as any).mixin('drive-stream', { driveStream: new DriveStreamManager(mios.i) });
	(riot as any).mixin('server-stream', { serverStream: new ServerStreamManager() });
	(riot as any).mixin('requests-stream', { requestsStream: new RequestsStreamManager() });
	(riot as any).mixin('messaging-index-stream', { messagingIndexStream: new MessagingIndexStreamManager(mios.i) });
};
