/*
 * SPDX-FileCopyrightText: syuilo and misskey-project
 * SPDX-License-Identifier: AGPL-3.0-only
 */

// ブラウザで直接表示することを許可するファイルの種類のリスト
// ここに含まれないものは application/octet-stream としてレスポンスされる
// SVGはXSSを生むので許可しない
export const FILE_TYPE_BROWSERSAFE = [
	// Images
	'image/png',
	'image/gif',
	'image/jpeg',
	'image/webp',
	'image/avif',
	'image/apng',
	'image/bmp',
	'image/tiff',
	'image/x-icon',
	'image/jxl',

	// OggS
	'audio/opus',
	'video/ogg',
	'audio/ogg',
	'application/ogg',

	// ISO/IEC base media file format
	'video/quicktime',
	'video/mp4',
	'audio/mp4',
	'video/x-m4v',
	'audio/x-m4a',
	'video/3gpp',
	'video/3gpp2',

	'video/mpeg',
	'audio/mpeg',

	'video/webm',
	'audio/webm',

	'audio/aac',

	// see https://github.com/misskey-dev/misskey/pull/10686
	'audio/flac',
	'audio/wav',
	// backward compatibility
	'audio/x-flac',
	'audio/vnd.wave',
];

export const FILE_TYPE_TRACKER_MODULES = [
	'audio/mod',
	'audio/x-mod',
	'audio/s3m',
	'audio/x-s3m',
	'audio/xm',
	'audio/x-xm',
	'audio/it',
	'audio/x-it',
];

export const FILE_EXT_TRACKER_MODULES = [
	'mod',
	's3m',
	'xm',
	'it',
	'mptm',
	'stm',
	'nst',
	'm15',
	'stk',
	'wow',
	'ult',
	'669',
	'mtm',
	'med',
	'far',
	'mdl',
	'ams',
	'dsm',
	'amf',
	'okt',
	'dmf',
	'ptm',
	'psm',
	'mt2',
	'dbm',
	'digi',
	'imf',
	'j2b',
	'gdm',
	'umx',
	'plm',
	'mo3',
	'xpk',
	'ppm',
	'mmcmp',
];

export const FILE_TYPE_FLASH_CONTENT = [
	'application/x-shockwave-flash',
	'application/vnd.adobe.flash.movie',
];

export const FILE_EXT_FLASH_CONTENT = [
	'swf',
];

/*
https://github.com/sindresorhus/file-type/blob/main/supported.js
https://github.com/sindresorhus/file-type/blob/main/core.js
https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Containers
*/

export const notificationTypes = [
	'note',
	'follow',
	'mention',
	'reply',
	'renote',
	'quote',
	'reaction',
	'pollEnded',
	'receiveFollowRequest',
	'followRequestAccepted',
	'roleAssigned',
	'achievementEarned',
	'exportCompleted',
	'login',
	'test',
	'app',
	'edited',
	'scheduledNoteFailed',
	'scheduledNotePosted',
] as const;
export const obsoleteNotificationTypes = ['pollVote', 'groupInvited'] as const;

export const ROLE_POLICIES = [
	'gtlAvailable',
	'ltlAvailable',
	'btlAvailable',
	'canPublicNote',
	'canImportNotes',
	'scheduleNoteMax',
	'mentionLimit',
	'canInvite',
	'inviteLimit',
	'inviteLimitCycle',
	'inviteExpirationTime',
	'canManageCustomEmojis',
	'canManageAvatarDecorations',
	'canSearchNotes',
	'canUseTranslator',
	'canHideAds',
	'driveCapacityMb',
	'alwaysMarkNsfw',
	'canUpdateBioMedia',
	'pinLimit',
	'antennaLimit',
	'wordMuteLimit',
	'webhookLimit',
	'clipLimit',
	'noteEachClipsLimit',
	'userListLimit',
	'userEachUserListsLimit',
	'rateLimitFactor',
	'avatarDecorationLimit',
	'canImportAntennas',
	'canImportBlocking',
	'canImportFollowing',
	'canImportMuting',
	'canImportUserLists',
] as const;

// なんか動かない
//export const CURRENT_STICKY_TOP = Symbol('CURRENT_STICKY_TOP');
//export const CURRENT_STICKY_BOTTOM = Symbol('CURRENT_STICKY_BOTTOM');
export const CURRENT_STICKY_TOP = 'CURRENT_STICKY_TOP';
export const CURRENT_STICKY_BOTTOM = 'CURRENT_STICKY_BOTTOM';

export const DEFAULT_SERVER_ERROR_IMAGE_URL = '/client-assets/status/error.png';
export const DEFAULT_NOT_FOUND_IMAGE_URL = '/client-assets/status/missingpage.webp';
export const DEFAULT_INFO_IMAGE_URL = '/client-assets/status/nothinghere.png';

export const MFM_TAGS = ['tada', 'jelly', 'twitch', 'shake', 'spin', 'jump', 'bounce', 'flip', 'x2', 'x3', 'x4', 'scale', 'position', 'fg', 'bg', 'border', 'font', 'blur', 'rainbow', 'sparkle', 'rotate', 'ruby', 'unixtime', 'crop', 'fade', 'followmouse'];
export const MFM_PARAMS: Record<typeof MFM_TAGS[number], string[]> = {
	tada: ['speed=', 'delay='],
	jelly: ['speed=', 'delay='],
	twitch: ['speed=', 'delay='],
	shake: ['speed=', 'delay='],
	spin: ['speed=', 'delay=', 'left', 'alternate', 'x', 'y'],
	jump: ['speed=', 'delay='],
	bounce: ['speed=', 'delay='],
	flip: ['h', 'v'],
	x2: [],
	x3: [],
	x4: [],
	scale: ['x=', 'y='],
	position: ['x=', 'y='],
	fg: ['color='],
	bg: ['color='],
	border: ['width=', 'style=', 'color=', 'radius=', 'noclip'],
	font: ['serif', 'monospace', 'cursive', 'fantasy', 'emoji', 'math'],
	blur: [],
	rainbow: ['speed=', 'delay='],
	rotate: ['deg='],
	ruby: [],
	unixtime: [],
	fade: ['speed=', 'delay=', 'loop=', 'out'],
	crop: ['top=', 'bottom=', 'left=', 'right='],
	followmouse: ['x', 'y', 'rotateByVelocity', 'speed='],
};
