"use client";
import { useState } from 'react';
import { useAuth } from '@/contexts/AuthContext';
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card';
import { Button } from '@/components/ui/button';
import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from '@/components/ui/dialog';
import { Copy, KeyRound, Server, User, Check } from 'lucide-react';
import {
AlertDialog,
AlertDialogAction,
AlertDialogCancel,
AlertDialogContent,
AlertDialogDescription,
AlertDialogFooter,
AlertDialogHeader,
AlertDialogTitle,
AlertDialogTrigger,
} from "@/components/ui/alert-dialog"
import { Skeleton } from '@/components/ui/skeleton';
function CredentialRow({ icon, label, value, onCopy, isCopied }) {
return (
);
}
export function SipCredentialsCard({ details, loading, refetchDetails }) {
const { token } = useAuth();
const [newSecret, setNewSecret] = useState(null);
const [isResetting, setIsResetting] = useState(false);
const [copiedState, setCopiedState] = useState({});
const handleResetSecret = async () => {
if (!token) return;
setIsResetting(true);
try {
const res = await fetch(`${process.env.NEXT_PUBLIC_API_URL || 'http://localhost:3001'}/extensions/me/resetsecret`, {
method: 'POST',
headers: { 'Authorization': `Bearer ${token}` }
});
const data = await res.json();
setNewSecret(data.newSecret);
if (refetchDetails) {
refetchDetails();
}
} catch (error) {
console.error("Failed to reset secret", error);
alert('Failed to reset secret.');
} finally {
setIsResetting(false);
}
};
const copyToClipboard = (text, id) => {
if (!text) return;
navigator.clipboard.writeText(text).then(() => {
setCopiedState(prev => ({ ...prev, [id]: true }));
setTimeout(() => {
setCopiedState(prev => ({ ...prev, [id]: false }));
}, 2000);
});
};
if (loading) {
return (
);
}
return (
SIP Credentials
Use these details to connect your SIP client.
} label="SIP Server" value="pbx.litenet.tel" onCopy={() => copyToClipboard('pbx.litenet.tel', 'server')} isCopied={copiedState['server']} />
} label="SIP Username" value={details?.extensionId} onCopy={() => copyToClipboard(details?.extensionId, 'username')} isCopied={copiedState['username']} />
} label="SIP Secret" value="••••••••••••" onCopy={() => copyToClipboard(details?.user?.extPassword, 'secret')} isCopied={copiedState['secret']} />
);
}