import { UserContactEntity, ContactType, NotificationType } from '../entities/user-contact.entity';

export interface IUserContactRepository {
  /**
   * 保存联系方式
   */
  save(contact: UserContactEntity): Promise<void>;

  /**
   * 根据ID查找
   */
  findById(id: string): Promise<UserContactEntity | null>;

  /**
   * 根据用户ID和类型查找
   */
  findByUserIdAndType(userId: string, type: ContactType): Promise<UserContactEntity | null>;

  /**
   * 获取用户所有联系方式
   */
  findByUserId(userId: string): Promise<UserContactEntity[]>;

  /**
   * 获取用户已验证的联系方式
   */
  findVerifiedByUserId(userId: string): Promise<UserContactEntity[]>;

  /**
   * 更新联系方式
   */
  update(contact: UserContactEntity): Promise<void>;

  /**
   * 删除联系方式
   */
  delete(id: string): Promise<void>;

  /**
   * 查找启用指定通知类型的联系方式
   */
  findByNotificationType(
    notificationType: NotificationType,
    options?: { limit?: number; offset?: number },
  ): Promise<UserContactEntity[]>;

  /**
   * 统计已验证的联系方式数量（按类型）
   */
  countVerifiedByType(): Promise<Record<ContactType, number>>;
}

export const USER_CONTACT_REPOSITORY = Symbol('USER_CONTACT_REPOSITORY');
