Files
nabeh/mobile/lib/features/dashboard/presentation/widgets/chatbot_view.dart
2026-05-24 23:27:32 +03:00

130 lines
5.2 KiB
Dart

import 'package:flutter/material.dart';
import '../../data/models/chatbot_rule_model.dart';
class ChatbotView extends StatelessWidget {
final List<ChatbotRuleModel> rules;
const ChatbotView({
super.key,
required this.rules,
});
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(20.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const Text(
'🤖 قواعد الرد الآلي للدردشة',
style: TextStyle(color: Colors.white, fontSize: 20, fontWeight: FontWeight.bold),
),
const SizedBox(height: 8),
const Text(
'إدارة قواعد الذكاء الاصطناعي والكلمات المفتاحية المخصصة لتلقي ومعالجة المحادثات الواردة.',
style: TextStyle(color: Colors.white60, fontSize: 13),
),
const SizedBox(height: 24),
// English: Render list of chatbot rule cards.
// Arabic: عرض قائمة ببطاقات قواعد روبوت الدردشة المكونة.
if (rules.isEmpty)
const Center(
child: Padding(
padding: EdgeInsets.symmetric(vertical: 40.0),
child: Text(
'لم يتم تكوين قواعد رد آلي بعد.',
style: TextStyle(color: Colors.white70),
),
),
)
else
ListView.builder(
shrinkWrap: true,
physics: const NeverScrollableScrollPhysics(),
itemCount: rules.length,
itemBuilder: (context, index) {
final rule = rules[index];
return Container(
margin: const EdgeInsets.only(bottom: 16),
padding: const EdgeInsets.all(16),
decoration: BoxDecoration(
color: const Color(0xFF15102A),
borderRadius: BorderRadius.circular(16),
border: Border.all(color: Colors.white.withOpacity(0.05)),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
_buildTriggerBadge(rule.triggerType),
_buildStatusBadge(rule.isActive),
],
),
const Divider(color: Colors.white10, height: 24),
if (rule.triggerType == 'keyword' && rule.keyword != null) ...[
const Text(
'الكلمة المفتاحية للمشغل:',
style: TextStyle(color: Colors.white70, fontSize: 12),
),
const SizedBox(height: 4),
Text(
rule.keyword!,
style: const TextStyle(color: Colors.white, fontSize: 14, fontWeight: FontWeight.bold),
),
const SizedBox(height: 12),
],
const Text(
'رد الروبوت أو تعليمات موجه الذكاء الاصطناعي (AI Prompt):',
style: TextStyle(color: Colors.white70, fontSize: 12),
),
const SizedBox(height: 4),
Text(
rule.aiPrompt ?? 'لا توجد تعليمات',
style: TextStyle(color: Colors.white.withOpacity(0.8), fontSize: 13, height: 1.4),
),
],
),
);
},
),
],
),
);
}
Widget _buildTriggerBadge(String type) {
final isAi = type == 'gemini_ai';
return Container(
padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 4),
decoration: BoxDecoration(
color: isAi ? Colors.purpleAccent.withOpacity(0.2) : Colors.blue.withOpacity(0.2),
borderRadius: BorderRadius.circular(8),
border: Border.all(color: isAi ? Colors.purpleAccent : Colors.blue),
),
child: Text(
isAi ? '🧠 ذكاء اصطناعي (Gemini)' : '⌨️ كلمات مفتاحية',
style: TextStyle(color: isAi ? Colors.purpleAccent : Colors.blue, fontSize: 11, fontWeight: FontWeight.bold),
),
);
}
Widget _buildStatusBadge(bool isActive) {
return Container(
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4),
decoration: BoxDecoration(
color: isActive ? Colors.green.withOpacity(0.2) : Colors.grey.withOpacity(0.2),
borderRadius: BorderRadius.circular(8),
border: Border.all(color: isActive ? Colors.green : Colors.grey),
),
child: Text(
isActive ? 'نشط' : 'غير نشط',
style: TextStyle(color: isActive ? Colors.green : Colors.grey, fontSize: 10, fontWeight: FontWeight.bold),
),
);
}
}