import { ICheckbox } from ".";
import { IRemainingRequests } from "./IRemainingRequests";

export interface IUser {
    id: string;
    userName: string;
    alias: string;
    claims: ICheckbox[];
    emailAddress: string;
    password: string;
    userType: UserType;
    userAlias: string;
    lastLoggedIn: Date;
    hasLoggedIn: boolean;
    movieRequestLimit: number;
    episodeRequestLimit: number;
    musicRequestLimit: number;
    userAccessToken: string;
    language: string;
    userQualityProfiles: IUserQualityProfiles;
    streamingCountry: string;

    movieRequestLimitType?: RequestLimitType;
    episodeRequestLimitType?: RequestLimitType;
    musicRequestLimitType?: RequestLimitType;

    // FOR UI
    episodeRequestQuota: IRemainingRequests | null;
    movieRequestQuota: IRemainingRequests | null;
    musicRequestQuota: IRemainingRequests | null;
}

export enum RequestLimitType
{
    Day = 0,
    Week = 1,
    Month = 2,
}

export interface IUserDropdown {
    username: string;
    id: string;
    email: string;
}

export interface IUserQualityProfiles {
    sonarrQualityProfileAnime: number;
    sonarrRootPathAnime: number;
    sonarrRootPath: number;
    sonarrQualityProfile: number;
    radarrRootPath: number;
    radarrQualityProfile: number;
    radarr4KRootPath: number;
    radarr4KQualityProfile: number;
}

export interface ICreateWizardUser {
    username: string;
    password: string;
    usePlexAdminAccount: boolean;
}

export interface IWizardUserResult {
    result: boolean;
    errors: string[];
}

export interface IStreamingCountries {
    code: string;
}

export enum UserType {
    LocalUser = 1,
    PlexUser = 2,
    EmbyUser = 3,
    EmbyConnect = 4,
    JellyfinUser = 5,
}

export interface IIdentityResult {
    errors: string[];
    successful: boolean;
}

export interface IUpdateLocalUser {
    currentPassword: string;
    password: string;
    id: string;
    emailAddress: string;
    confirmNewPassword: string;
}

export interface IResetPasswordToken {
    email: string;
    token: string;
    password: string;
}

export interface IMobileUsersViewModel {
    username: string;
    userId: string;
    devices: number;
}

export interface ICloudMobileModel {
    userId: string;
    username: string;
    devices: ICloudMobileDevices[];
}
export interface ICloudMobileDevices {
    token: string;
    userId: string;
    addedAt: Date;
    user: IUser;
}

export interface IMassEmailUserModel {
    user: IUser;
    selected: boolean;
}

export interface IMassEmailModel {
    subject: string;
    body: string;
    users: IUser[];
    bcc: boolean;
}

export interface INotificationPreferences {
    id: number;
    userId: string;
    agent: INotificationAgent;
    enabled: boolean;
    value: string;
}

export enum INotificationAgent {

    Email = 0,
    Discord = 1,
    Pushbullet = 2,
    Pushover = 3,
    Telegram = 4,
    Slack = 5,
    Mattermost = 6,
    Mobile = 7,
    Gotify = 8,
    Webhook = 9,
    WhatsApp = 10
}

export interface IFeatureEnablement {
    name: string;
    enabled: boolean;
}