page.tsx 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. "use client";
  2. import { useRouter } from "next/navigation";
  3. import { useSession } from "next-auth/react";
  4. import { useEffect } from "react";
  5. import { MessageCircle, Heart } from "lucide-react";
  6. import AuthenticatedLayout from "@/components/AuthenticatedLayout";
  7. import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card";
  8. import { ChatSelectHeader } from "@/components/chatbot/ChatSelectHeader";
  9. export default function ChatSelectPage() {
  10. const router = useRouter();
  11. const { data: session, status } = useSession();
  12. useEffect(() => {
  13. if (status === "unauthenticated") {
  14. router.push("/auth/login");
  15. }
  16. }, [status, router]);
  17. useEffect(() => {
  18. if (session && session.user.role !== "PATIENT") {
  19. router.push("/dashboard");
  20. }
  21. }, [session, router]);
  22. if (status === "loading") {
  23. return (
  24. <div className="min-h-screen flex items-center justify-center">
  25. <div className="w-8 h-8 border-4 border-blue-600 border-t-transparent rounded-full animate-spin"></div>
  26. </div>
  27. );
  28. }
  29. if (!session || session.user.role !== "PATIENT") {
  30. return null;
  31. }
  32. const handleMedicalChat = () => {
  33. router.push("/chat?type=medical");
  34. };
  35. const handlePsychologicalChat = () => {
  36. router.push("/chat?type=psychological");
  37. };
  38. return (
  39. <AuthenticatedLayout>
  40. <div className="flex items-center justify-center min-h-[calc(100vh-4rem)] p-6">
  41. <div className="w-full max-w-5xl space-y-8">
  42. {/* Header */}
  43. <ChatSelectHeader />
  44. {/* Chat Options */}
  45. <div className="grid gap-6 md:grid-cols-2">
  46. {/* Chat Médico */}
  47. <Card
  48. className="cursor-pointer transition-all hover:shadow-lg hover:border-blue-400 hover:scale-105"
  49. onClick={handleMedicalChat}
  50. >
  51. <CardHeader>
  52. <div className="flex items-center gap-4">
  53. <div className="w-12 h-12 bg-blue-100 dark:bg-blue-500 rounded-lg flex items-center justify-center">
  54. <MessageCircle className="w-6 h-6 text-blue-600 dark:text-blue-100" />
  55. </div>
  56. <div>
  57. <CardTitle className="text-xl">Consulta Médica</CardTitle>
  58. </div>
  59. </div>
  60. </CardHeader>
  61. <CardContent>
  62. <CardDescription className="text-base text-gray-700 dark:text-gray-700">
  63. Obtén información sobre síntomas, condiciones médicas y recomendaciones de salud
  64. </CardDescription>
  65. <ul className="mt-4 space-y-2 text-sm text-gray-600 dark:text-gray-400">
  66. <li className="flex items-center gap-2">
  67. <span className="text-blue-500">•</span>
  68. <span>Límite de 10 mensajes</span>
  69. </li>
  70. <li className="flex items-center gap-2">
  71. <span className="text-blue-500">•</span>
  72. <span>Reporte médico al finalizar</span>
  73. </li>
  74. <li className="flex items-center gap-2">
  75. <span className="text-blue-500">•</span>
  76. <span>Sistema de alertas</span>
  77. </li>
  78. </ul>
  79. </CardContent>
  80. </Card>
  81. {/* Chat Psicológico */}
  82. <Card
  83. className="cursor-pointer transition-all hover:shadow-lg hover:border-purple-400 hover:scale-105"
  84. onClick={handlePsychologicalChat}
  85. >
  86. <CardHeader>
  87. <div className="flex items-center gap-4">
  88. <div className="w-12 h-12 bg-purple-100 dark:bg-purple-500 rounded-lg flex items-center justify-center">
  89. <Heart className="w-6 h-6 text-purple-600 dark:text-purple-100" />
  90. </div>
  91. <div>
  92. <CardTitle className="text-xl">Apoyo Psicológico</CardTitle>
  93. </div>
  94. </div>
  95. </CardHeader>
  96. <CardContent>
  97. <CardDescription className="text-base text-gray-700 dark:text-gray-700">
  98. Un espacio seguro para hablar sobre tus emociones, pensamientos y bienestar mental
  99. </CardDescription>
  100. <ul className="mt-4 space-y-2 text-sm text-gray-600 dark:text-gray-400">
  101. <li className="flex items-center gap-2">
  102. <span className="text-purple-500">•</span>
  103. <span>Sin límite de mensajes</span>
  104. </li>
  105. <li className="flex items-center gap-2">
  106. <span className="text-purple-500">•</span>
  107. <span>Conversación confidencial</span>
  108. </li>
  109. <li className="flex items-center gap-2">
  110. <span className="text-purple-500">•</span>
  111. <span>Termina cuando quieras</span>
  112. </li>
  113. </ul>
  114. </CardContent>
  115. </Card>
  116. </div>
  117. </div>
  118. </div>
  119. </AuthenticatedLayout>
  120. );
  121. }