import { SocialAccount, SocialProvider } from '../entities/social-account.entity';

export interface ISocialAccountRepository {
  /**
   * 按 provider + openid 查找社交账号
   * 微信场景：openid 唯一标识当前 App 下的用户
   */
  findByProviderAndOpenid(
    provider: SocialProvider,
    openid: string,
  ): Promise<SocialAccount | null>;

  /**
   * 按 provider + unionid 查找社交账号
   * 微信场景：unionid 可跨 App 识别同一微信用户（优先使用）
   */
  findByProviderAndUnionid(
    provider: SocialProvider,
    unionid: string,
  ): Promise<SocialAccount | null>;

  /**
   * 查找某用户绑定的指定 provider 账号
   * 用于"已绑定"检查，防止重复绑定
   */
  findByUserAndProvider(
    userId: string,
    provider: SocialProvider,
  ): Promise<SocialAccount | null>;

  /** 创建社交账号绑定记录 */
  create(data: {
    userId: string;
    provider: SocialProvider;
    openid: string;
    unionid?: string;
    nickname?: string;
    avatarUrl?: string;
    rawData?: Record<string, unknown>;
  }): Promise<SocialAccount>;

  /** 更新社交账号信息（头像/昵称等，每次登录同步） */
  save(account: SocialAccount): Promise<SocialAccount>;

  /** 解绑社交账号 */
  delete(id: string): Promise<void>;
}

export const SOCIAL_ACCOUNT_REPOSITORY = Symbol('ISocialAccountRepository');
