import { Injectable } from '@angular/core';
import { ActivatedRouteSnapshot, CanActivate, RouterStateSnapshot, UrlTree } from '@angular/router';
import { NavController } from '@ionic/angular';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
import { Result } from '../models/onchat.model';
import { FriendService } from '../services/apis/friend.service';
import { GlobalData } from '../services/global-data.service';

@Injectable({
  providedIn: 'root'
})
export class NotFriendGuard implements CanActivate {
  constructor(
    private friendService: FriendService,
    private globalData: GlobalData,
    private navCtrl: NavController,
  ) { }

  canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {
    return this.friendService.isFriend(+next.params.userId).pipe(
      map(({ data }: Result<number>) => {
        // TODO 写完单聊之后,自己跟自己也是好友,把this.globalData.user.id == next.params.userId删除
        const isFriend = !!data || this.globalData.user?.id === next.params.userId;
        isFriend && this.navCtrl.back();

        return !isFriend;
      })
    );
  }
}