import Swal from 'sweetalert2' import { loginSchema, getFirstZodError, getFieldErrors } from '~~/lib/validations/auth' export function useLogin () { const { signIn } = useAuth() const router = useRouter() const route = useRoute() const email = ref('') const password = ref('') const turnstileToken = ref(null) const turnstileRef = ref<{ reset: () => void } | null>(null) const fieldError = ref>({}) const loading = ref(false) const callbackUrl = computed(() => (route.query.callbackUrl as string) || '/') async function onSubmit () { fieldError.value = {} const parsed = loginSchema.safeParse({ email: email.value, password: password.value }) if (!parsed.success) { fieldError.value = getFieldErrors(parsed.error) await Swal.fire({ icon: 'error', title: 'Doğrulama hatası', text: getFirstZodError(parsed.error) }) return } if (!turnstileToken.value) { await Swal.fire({ icon: 'warning', title: 'Güvenlik doğrulaması', text: 'Lütfen güvenlik kutusunu işaretleyin.' }) return } loading.value = true try { const result = await signIn('credentials', { email: email.value, password: password.value, turnstile_token: turnstileToken.value, callbackUrl: callbackUrl.value, }) if (result?.error) { const msg = result.error === 'CredentialsSignin' ? 'E-posta veya şifre hatalı.' : String(result.error) await Swal.fire({ icon: 'error', title: 'Giriş başarısız', text: msg }) turnstileRef.value?.reset() turnstileToken.value = null return } await Swal.fire({ icon: 'success', title: 'Giriş başarılı', timer: 1500, showConfirmButton: false }) if (result?.url) await router.push(result.url) } catch (e: unknown) { const msg = e instanceof Error ? e.message : 'Giriş yapılamadı.' await Swal.fire({ icon: 'error', title: 'Hata', text: msg }) turnstileRef.value?.reset() turnstileToken.value = null } finally { loading.value = false } } async function signInWith (provider: 'github' | 'google') { loading.value = true try { await signIn(provider, { callbackUrl: callbackUrl.value }) } catch (e: unknown) { const msg = e instanceof Error ? e.message : 'Giriş yapılamadı.' await Swal.fire({ icon: 'error', title: 'Hata', text: msg }) } finally { loading.value = false } } return { email, password, turnstileToken, turnstileRef, fieldError, loading, callbackUrl, onSubmit, signInWith, } }