import { Injectable } from '@nestjs/common'
import { InjectRepository } from '@nestjs/typeorm'
import { Repository } from 'typeorm'
import { Token } from '../entities/token.entity'

@Injectable()
export class TokenService {
	constructor(
		@InjectRepository(Token)
		private tokenRepository: Repository<Token>,
	) {}

	async getLatestToken(provider: string): Promise<Token | null> {
		return this.tokenRepository.findOne({
			where: { provider },
			order: { updatedAt: 'DESC' },
		})
	}

	async saveToken(provider: string, accessToken: string, refreshToken: string, expiresAt?: Date): Promise<Token> {
		const token = new Token()
		token.provider = provider
		token.accessToken = accessToken
		token.refreshToken = refreshToken
		if (expiresAt) {
			token.expiresAt = expiresAt
		}

		return this.tokenRepository.save(token)
	}

	async updateToken(id: number, accessToken: string, refreshToken: string, expiresAt?: Date): Promise<Token | null> {
		await this.tokenRepository.update(id, {
			accessToken,
			refreshToken,
			...(expiresAt ? { expiresAt } : {}),
		})

		return this.tokenRepository.findOne({ where: { id } })
	}
}
