import * as mongo from 'mongodb';
import db from '../db/mongodb';

const Stats = db.get<IStats>('stats');
Stats.createIndex({ date: -1 }, { unique: true });
export default Stats;

export interface IStats {
	_id: mongo.ObjectID;

	date: Date;

	span: 'day' | 'hour';

	/**
	 * ユーザーに関する統計
	 */
	users: {
		local: {
			/**
			 * この日時点での、ローカルのユーザーの総計
			 */
			total: number;

			/**
			 * ローカルのユーザー数の前日比
			 */
			diff: number;
		};

		remote: {
			/**
			 * この日時点での、リモートのユーザーの総計
			 */
			total: number;

			/**
			 * リモートのユーザー数の前日比
			 */
			diff: number;
		};
	};

	/**
	 * 投稿に関する統計
	 */
	notes: {
		local: {
			/**
			 * この日時点での、ローカルの投稿の総計
			 */
			total: number;

			/**
			 * ローカルの投稿数の前日比
			 */
			diff: number;

			diffs: {
				/**
				 * ローカルの通常の投稿数の前日比
				 */
				normal: number;

				/**
				 * ローカルのリプライの投稿数の前日比
				 */
				reply: number;

				/**
				 * ローカルのRenoteの投稿数の前日比
				 */
				renote: number;
			};
		};

		remote: {
			/**
			 * この日時点での、リモートの投稿の総計
			 */
			total: number;

			/**
			 * リモートの投稿数の前日比
			 */
			diff: number;

			diffs: {
				/**
				 * リモートの通常の投稿数の前日比
				 */
				normal: number;

				/**
				 * リモートのリプライの投稿数の前日比
				 */
				reply: number;

				/**
				 * リモートのRenoteの投稿数の前日比
				 */
				renote: number;
			};
		};
	};

	/**
	 * ドライブ(のファイル)に関する統計
	 */
	drive: {
		local: {
			/**
			 * この日時点での、ローカルのドライブファイル数の総計
			 */
			totalCount: number;

			/**
			 * この日時点での、ローカルのドライブファイルサイズの総計
			 */
			totalSize: number;

			/**
			 * ローカルのドライブファイル数の前日比
			 */
			diffCount: number;

			/**
			 * ローカルのドライブファイルサイズの前日比
			 */
			diffSize: number;
		};

		remote: {
			/**
			 * この日時点での、リモートのドライブファイル数の総計
			 */
			totalCount: number;

			/**
			 * この日時点での、リモートのドライブファイルサイズの総計
			 */
			totalSize: number;

			/**
			 * リモートのドライブファイル数の前日比
			 */
			diffCount: number;

			/**
			 * リモートのドライブファイルサイズの前日比
			 */
			diffSize: number;
		};
	};
}
