type UserRegisterInfo {
   username: string;
   name: string;
   gender: string;
   mail: string;
   password: string;
   salt: string;
}

type Token {
   id: string;
   special: boolean;
   ip: string;
   browser: string;
   isthis: boolean;
}

enum Gender {
   None = 0,
   Male = 1,
   Female = 2,
   Other = 3
}

type Account {
   id: string;
   name: string;
   username: string;
   birthday: int;
   gender: Gender;
}

type Mail {
   mail: string;
   verified: boolean;
   primary: boolean;
}

type Phone {
   phone: string;
   verified: boolean;
   primary: boolean;
}

type ContactInfo {
   mail: Mail[];
   phone: Phone[];
}

enum TFAType {
   TOTP = 0,
   BACKUP_CODE = 1,
   WEBAUTHN = 2,
   APP_ALLOW = 3
}


type TwoFactor {
   id: string;
   name?: string;
   expires?: int;
   tfatype: TFAType;
}

service AccountService {
   Register(regcode: string, info: UserRegisterInfo): void;
   GetProfile(): Account;
   UpdateProfile(info: Account): void;
   GetContactInfos(): ContactInfo;
}

service SecurityService {
   GetTokens(): Token[];
   RevokeToken(id: string): void;

   GetTwofactorOptions(): TwoFactor[];
}
