import { Collection } from "@discordjs/collection"
import { GuildScheduledEvent, Role, TextChannel } from "discord.js"

export type Maybe<T> = T | undefined | null
export interface Player {
	name: string
}
export type supported_languages = "german" | "english"
export interface localized_string {
	[k: string]: {
		[k in supported_languages]: string
	}
}
export class CustomError extends Error {
	private code: string
	public constructor(message: string, errorCode: string) {
		super(message)
		this.code = errorCode
	}
	public getCode() { return this.code }
}
export const errorCodes = {
	no_end_date: 'no_end_date',
	no_string_present: 'no_string_present',
	no_schedule: 'no_schedule',
	schedule_not_supported: 'schedule_not_supported',
	no_repetition_amount: 'no_repetition_amount',
	invalid_repetition_string: 'invalid_repetition_string',
	no_creator_id: "no_creator_id",
}
export interface ChangedRoles {
	addedRoles: Collection<string, Role>
	removedRoles: Collection<string, Role>
}
export interface JellyfinConfig {
	jellyfinUrl: string,
	jellyfinToken: string,
	movieCollectionId: string,
	collectionUser: string
}
export type PermissionLevel = "VIEWER" | "ADMIN" | "TEMPORARY"
export interface voteMessageInputInformation {
	movies: string[],
	startDate: Date,
	event: GuildScheduledEvent,
	announcementChannel: TextChannel,
	pinAfterSending: boolean,
}
