import type { Passkey } from '$lib/types/passkey.type';
import type { User } from '$lib/types/user.type';
import APIService from './api-service';
import userStore from '$lib/stores/user-store';
import type { AuthenticationResponseJSON, RegistrationResponseJSON } from '@simplewebauthn/browser';

class WebAuthnService extends APIService {
	async getRegistrationOptions() {
		return (await this.api.get(`/webauthn/register/start`)).data;
	}

	async finishRegistration(body: RegistrationResponseJSON) {
		return (await this.api.post(`/webauthn/register/finish`, body)).data as Passkey;
	}

	async getLoginOptions() {
		return (await this.api.get(`/webauthn/login/start`)).data;
	}

	async finishLogin(body: AuthenticationResponseJSON) {
		return (await this.api.post(`/webauthn/login/finish`, body)).data as User;
	}

	async logout() {
		await this.api.post(`/webauthn/logout`);
		userStore.clearUser();
	}

	async listCredentials() {
		return (await this.api.get(`/webauthn/credentials`)).data as Passkey[];
	}

	async removeCredential(id: string) {
		await this.api.delete(`/webauthn/credentials/${id}`);
	}

	async updateCredentialName(id: string, name: string) {
		await this.api.patch(`/webauthn/credentials/${id}`, { name });
	}
}

export default WebAuthnService;
