// package: bet.beteran.member
// file: models/member/member.proto

import * as jspb from 'google-protobuf';
import * as models_member_member_class_pb from '../../models/member/member_class_pb';
import * as models_member_member_level_pb from '../../models/member/member_level_pb';
import * as models_member_member_site_pb from '../../models/member/member_site_pb';

export class Member extends jspb.Message {
  getId(): string;
  setId(value: string): void;

  getDomainId(): string;
  setDomainId(value: string): void;

  hasMemberClass(): boolean;
  clearMemberClass(): void;
  getMemberClass(): models_member_member_class_pb.MemberClass | undefined;
  setMemberClass(value?: models_member_member_class_pb.MemberClass): void;

  hasMemberLevel(): boolean;
  clearMemberLevel(): void;
  getMemberLevel(): models_member_member_level_pb.MemberLevel | undefined;
  setMemberLevel(value?: models_member_member_level_pb.MemberLevel): void;

  hasMemberSite(): boolean;
  clearMemberSite(): void;
  getMemberSite(): models_member_member_site_pb.MemberSite | undefined;
  setMemberSite(value?: models_member_member_site_pb.MemberSite): void;

  hasReferrer(): boolean;
  clearReferrer(): void;
  getReferrer(): Member | undefined;
  setReferrer(value?: Member): void;

  getReferredCount(): number;
  setReferredCount(value: number): void;

  getUsername(): string;
  setUsername(value: string): void;

  getNickname(): string;
  setNickname(value: string): void;

  hasMobilePhoneNumber(): boolean;
  clearMobilePhoneNumber(): void;
  getMobilePhoneNumber(): string;
  setMobilePhoneNumber(value: string): void;

  getState(): MemberStateMap[keyof MemberStateMap];
  setState(value: MemberStateMap[keyof MemberStateMap]): void;

  hasStateChangedAt(): boolean;
  clearStateChangedAt(): void;
  getStateChangedAt(): number;
  setStateChangedAt(value: number): void;

  hasLastSigninedIp(): boolean;
  clearLastSigninedIp(): void;
  getLastSigninedIp(): string;
  setLastSigninedIp(value: string): void;

  hasLastSigninedAt(): boolean;
  clearLastSigninedAt(): void;
  getLastSigninedAt(): number;
  setLastSigninedAt(value: number): void;

  getCreatedAt(): number;
  setCreatedAt(value: number): void;

  getUpdatedAt(): number;
  setUpdatedAt(value: number): void;

  hasDeletedAt(): boolean;
  clearDeletedAt(): void;
  getDeletedAt(): number;
  setDeletedAt(value: number): void;

  serializeBinary(): Uint8Array;
  toObject(includeInstance?: boolean): Member.AsObject;
  static toObject(includeInstance: boolean, msg: Member): Member.AsObject;
  static extensions: { [key: number]: jspb.ExtensionFieldInfo<jspb.Message> };
  static extensionsBinary: {
    [key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>;
  };
  static serializeBinaryToWriter(
    message: Member,
    writer: jspb.BinaryWriter
  ): void;
  static deserializeBinary(bytes: Uint8Array): Member;
  static deserializeBinaryFromReader(
    message: Member,
    reader: jspb.BinaryReader
  ): Member;
}

export namespace Member {
  export type AsObject = {
    id: string;
    domainId: string;
    memberClass?: models_member_member_class_pb.MemberClass.AsObject;
    memberLevel?: models_member_member_level_pb.MemberLevel.AsObject;
    memberSite?: models_member_member_site_pb.MemberSite.AsObject;
    referrer?: Member.AsObject;
    referredCount: number;
    username: string;
    nickname: string;
    mobilePhoneNumber: string;
    state: MemberStateMap[keyof MemberStateMap];
    stateChangedAt: number;
    lastSigninedIp: string;
    lastSigninedAt: number;
    createdAt: number;
    updatedAt: number;
    deletedAt: number;
  };
}

export interface MemberStateMap {
  NONE: 0;
  NORMAL: 1;
  PENDING: 2;
  WITHDRAWAL: 3;
  DORMANCY: 4;
  BLACKLIST: 5;
  SUSPENDED: 6;
}

export const MemberState: MemberStateMap;
