import { Component, inject, signal } from '@angular/core'
import { NonNullableFormBuilder, ReactiveFormsModule, Validators } from '@angular/forms'
import { RouterLink } from '@angular/router'
import { DefaultService } from '@api-client/angular'
import { LoadingButtonDirective } from '@frontend/shared'
import { TranslocoDirective } from '@jsverse/transloco'
import { HotToastService } from '@ngxpert/hot-toast'
import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy'
import { finalize } from 'rxjs'
import { I18nService } from '../../../core'

@UntilDestroy({ checkProperties: true })
@Component({
	selector: 'kadi-reset-password',
	templateUrl: './reset-password.component.html',
	imports: [TranslocoDirective, ReactiveFormsModule, LoadingButtonDirective, RouterLink],
})
export class ResetPasswordComponent {
	private readonly _toast = inject(HotToastService)
	private readonly i18nService = inject(I18nService)
	private readonly _apiService = inject(DefaultService)
	private readonly _formBuilder = inject(NonNullableFormBuilder)

	readonly loading = signal(false)
	readonly form = this._formBuilder.group({
		email: this._formBuilder.control('', { validators: [Validators.required, Validators.email] }),
	})

	reset() {
		if (this.form.invalid) return

		const email = this.form.getRawValue().email

		this.loading.set(true)
		this._apiService
			.authControllerSendResetPasswordEmail({ email })
			.pipe(
				untilDestroyed(this),
				finalize(() => this.loading.set(false)),
			)
			.subscribe({
				next: () => this._toast.success(this.i18nService.translate('reset_email_sent_success', { email })),
				error: (error) => {
					this._toast.error(error.message)
				},
			})
	}
}
