import { Injectable } from '@nestjs/common';
import { JwtService } from '@nestjs/jwt';
import { User } from '../../entities/user.entity';
import { UsersService } from '../users/users.service';
import { GoogleUserPayload } from './strategies/google.strategy';

@Injectable()
export class AuthService {
  constructor(
    private usersService: UsersService,
    private jwtService: JwtService,
  ) {}

  async validateGoogleUser(payload: GoogleUserPayload): Promise<User> {
    return this.usersService.findOrCreate(
      payload.googleId,
      payload.email,
      payload.name,
      {
        accessToken: payload.accessToken,
        refreshToken: payload.refreshToken,
        expiry: payload.expiry,
      },
      payload.profilePhoto,
    );
  }

  async login(user: User): Promise<string> {
    return this.jwtService.sign({
      sub: user.id,
      email: user.email,
    });
  }
}
