"use client"; import { useEffect, useRef, useState } from "react"; import { AlertTriangle, Blocks, Brain, Key, Save, Shield, User } from "lucide-react"; import { updatePassword, updateProfile } from "./actions"; import { createClient } from "@/lib/supabase/client"; import { Button, Card, CardContent, Input, Label } from "poyraz-ui/atoms"; type AiProvider = "groq" | "ollama" | "openai" | "gemini"; export default function SettingsPage() { const [activeTab, setActiveTab] = useState("AI Preferences"); // Profile States const [firstName, setFirstName] = useState(""); const [lastName, setLastName] = useState(""); const [avatarUrl, setAvatarUrl] = useState(""); const [profileSaveStatus, setProfileSaveStatus] = useState(""); // Security States const [passwordSaveStatus, setPasswordSaveStatus] = useState(""); const formRef = useRef(null); // AI States const [aiProvider, setAiProvider] = useState("gemini"); const [apiKey, setApiKey] = useState(""); const [aiSaveStatus, setAiSaveStatus] = useState(""); // Supabase const [supabase] = useState(() => createClient()); const tabs = [ { name: "Profile & Account", icon: User }, { name: "AI Preferences", icon: Brain }, { name: "Security", icon: Shield }, ]; useEffect(() => { let isActive = true; const fetchData = async () => { const { data: { user } } = await supabase.auth.getUser(); if (!user || !isActive) return; // 1. Fetch Profile const { data: profile } = await supabase .from("profiles") .select("*") .eq("id", user.id) .single(); if (profile && isActive) { setFirstName(profile.first_name || ""); setLastName(profile.last_name || ""); setAvatarUrl(profile.avatar_url || ""); } // 2. Fetch User Settings from Supabase const { data: settings } = await supabase .from("app_settings") .select("*") .eq("user_id", user.id) .single(); if (settings && isActive) { setAiProvider((settings.ai_model as AiProvider) || "gemini"); setApiKey(settings.api_key || ""); // Also sync to local storage for existing API route calls if they use it localStorage.setItem("mindspace_ai_provider", settings.ai_model); localStorage.setItem("mindspace_api_key", settings.api_key || ""); } }; void fetchData(); return () => { isActive = false; }; }, [supabase]); const handleProfileAction = async (formData: FormData) => { const response = await updateProfile(formData); if (response?.error) { setProfileSaveStatus(`Hata: ${response.error}`); } else { setProfileSaveStatus("Profil güncellendi!"); const avatar = formData.get("avatar"); if (avatar instanceof File && avatar.size > 0) window.location.reload(); } setTimeout(() => setProfileSaveStatus(""), 3000); }; const handlePasswordAction = async (formData: FormData) => { const response = await updatePassword(formData); if (response?.error) { setPasswordSaveStatus(`Hata: ${response.error}`); } else { setPasswordSaveStatus("Şifre güncellendi!"); formRef.current?.reset(); } setTimeout(() => setPasswordSaveStatus(""), 3000); }; const handleSaveAI = async () => { try { const { data: { user } } = await supabase.auth.getUser(); if (!user) throw new Error("Giriş yapılmamış"); // Save to Supabase app_settings table const { error } = await supabase .from("app_settings") .upsert({ user_id: user.id, ai_model: aiProvider, api_key: apiKey, updated_at: new Date().toISOString() }, { onConflict: 'user_id' }); if (error) throw error; // Sync to localStorage as a redundant fallback localStorage.setItem("mindspace_ai_provider", aiProvider); localStorage.setItem("mindspace_api_key", apiKey); setAiSaveStatus("Yapay Zeka ayarları kaydedildi!"); } catch (e: any) { console.error(e); setAiSaveStatus("Hata oluştu, veritabanına kaydedilemedi."); } setTimeout(() => setAiSaveStatus(""), 3000); }; return (
Settings / {activeTab}

Ayarlar

Profilinizi, güvenlik ayarlarınızı ve yapay zeka tercihlerinizi yönetin.

{/* Settings Sidebar */}
{tabs.map((tab) => { const Icon = tab.icon; return ( ) })}
{/* Settings Content Area */}
{activeTab === "Profile & Account" && (

Kullanıcı Profili

{avatarUrl ? ( Avatar ) : (
)}
setFirstName(e.target.value)} />
setLastName(e.target.value)} />
{profileSaveStatus && {profileSaveStatus}}
)} {activeTab === "Security" && (

Şifre İşlemleri

{passwordSaveStatus && {passwordSaveStatus}}
)} {activeTab === "AI Preferences" && (

AI Asistan Konfigürasyonu

Model ve Sağlayıcı Seçimi

{aiProvider !== "ollama" && (

API Keys

setApiKey(e.target.value)} placeholder="sk-..." />
)}
{aiSaveStatus && {aiSaveStatus}}
)} {["Integrations", "Notifications", "Billing & Plans"].includes(activeTab) && (

{activeTab}

Bu bölüm şu an geliştirme aşamasındadır.

)}
); }