-- Improve handle_new_user function with better error handling
CREATE OR REPLACE FUNCTION public.handle_new_user()
RETURNS TRIGGER AS $$
DECLARE
  v_username TEXT;
BEGIN
  -- Extract username from email
  v_username := SPLIT_PART(NEW.email, '@', 1);
  
  -- Check if username already exists
  IF EXISTS (SELECT 1 FROM public.profiles WHERE username = v_username) THEN
    RAISE EXCEPTION 'Bu kullanıcı adı zaten kullanılıyor. Lütfen farklı bir kullanıcı adı seçin.';
  END IF;
  
  -- Insert new profile
  INSERT INTO public.profiles (id, username, full_name)
  VALUES (
    NEW.id,
    v_username,
    COALESCE(NEW.raw_user_meta_data->>'full_name', v_username)
  );
  
  RETURN NEW;
EXCEPTION
  WHEN unique_violation THEN
    RAISE EXCEPTION 'Bu kullanıcı adı zaten kullanılıyor. Lütfen farklı bir kullanıcı adı seçin.';
  WHEN OTHERS THEN
    RAISE EXCEPTION 'Kullanıcı profili oluşturulurken bir hata oluştu: %', SQLERRM;
END;
$$ LANGUAGE plpgsql SECURITY DEFINER;