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

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

	loading = false
	errors: string[] = []

	form = this._formBuilder.group({
		firstName: this._formBuilder.control('', Validators.required),
		lastName: this._formBuilder.control('', Validators.required),
		email: this._formBuilder.control('', [Validators.required, Validators.email]),
	})

	private readonly _dialogRef = inject(DialogRef)

	save(): void {
		if (this.form.invalid) return

		this.loading = true

		const user = this.form.getRawValue()

		this._apiService
			.userControllerCreate(user)
			.pipe(
				untilDestroyed(this),
				finalize(() => (this.loading = false)),
			)
			.subscribe({
				next: () => this._dialogRef.close(true),
				error: (error) => this._toast.error(error.message),
			})
	}
}
