"""
Management command to initialize onboarding acknowledgement data
"""
from django.core.management.base import BaseCommand
from django.utils import timezone
from apps.accounts.models import (
    AcknowledgementContent,
    AcknowledgementChecklistItem,
    Role
)


class Command(BaseCommand):
    help = 'Initialize default acknowledgement content and checklist items'

    def handle(self, *args, **options):
        self.stdout.write('Initializing onboarding acknowledgement data...')

        # Create generic content (applies to all users)
        self._create_generic_content()

        # Create role-specific content
        self._create_px_admin_content()
        self._create_hospital_admin_content()
        self._create_department_manager_content()
        self._create_physician_content()
        self._create_staff_content()

        self.stdout.write(self.style.SUCCESS('Onboarding data initialized successfully!'))

    def _create_generic_content(self):
        """Create generic acknowledgement content for all users"""
        self.stdout.write('Creating generic content...')

        role = None  # Generic content

        # Create generic content items
        contents = [
            {
                'code': 'INTRO_PX360',
                'order': 1,
                'title_en': 'Welcome to PX360',
                'title_ar': 'مرحبًا بك في PX360',
                'description_en': 'Overview of the PX360 Patient Experience Management System',
                'description_ar': 'نظرة عامة على نظام إدارة تجربة المريض PX360',
                'content_en': """
                    <h2>Welcome to PX360</h2>
                    <p>PX360 is a comprehensive Patient Experience Management System designed to help healthcare organizations improve patient satisfaction and quality of care.</p>
                    
                    <h3>Key Features:</h3>
                    <ul>
                        <li><strong>Patient Feedback Collection:</strong> Gather and analyze patient feedback across multiple channels</li>
                        <li><strong>Analytics & Reporting:</strong> Real-time dashboards and detailed reports</li>
                        <li><strong>Complaint Management:</strong> Streamlined process for handling patient complaints</li>
                        <li><strong>Quality Observations:</strong> Track and improve service quality</li>
                        <li><strong>Physician Management:</strong> Manage physician profiles and credentials</li>
                        <li><strong>Call Center Integration:</strong> Integrated call center for patient communication</li>
                    </ul>
                    
                    <h3>Getting Started:</h3>
                    <p>This wizard will guide you through the essential features and policies of the system. Please review each section carefully and acknowledge the checklist items to complete your onboarding.</p>
                """,
                'content_ar': """
                    <h2>مرحبًا بك في PX360</h2>
                    <p>PX360 هو نظام شامل لإدارة تجربة المرضى مصمم لمساعدة المؤسسات الصحية على تحسين رضا المرضى وجودة الرعاية.</p>
                    
                    <h3>الميزات الرئيسية:</h3>
                    <ul>
                        <li><strong>جمع ملاحظات المرضى:</strong> جمع وتحليل ملاحظات المرضى عبر قنوات متعددة</li>
                        <li><strong>التحليلات والتقارير:</strong> لوحات تحكم في الوقت الفعلي وتقارير مفصلة</li>
                        <li><strong>إدارة الشكاوى:</strong> عملية مبسطة للتعامل مع شكاوى المرضى</li>
                        <li><strong>ملاحظات الجودة:</strong> تتبع وتحسين جودة الخدمة</li>
                        <li><strong>إدارة الأطباء:</strong> إدارة ملفات الأطباء واعتماداتهم</li>
                        <li><strong>تكامل مركز الاتصال:</strong> مركز اتصال متكامل للتواصل مع المرضى</li>
                    </ul>
                    
                    <h3>البدء:</h3>
                    <p>سيقوم هذا المعالج بإرشادك عبر الميزات والسياسات الأساسية للنظام. يرجى مراجعة كل قسم بعناية والاعتراف بالبنود المدرجة في القائمة لإكمال التسجيل.</p>
                """
            },
            {
                'code': 'DATA_PRIVACY',
                'order': 2,
                'title_en': 'Data Privacy & Security',
                'title_ar': 'خصوصية البيانات والأمان',
                'description_en': 'Understanding data protection and security policies',
                'description_ar': 'فهم سياسات حماية البيانات والأمان',
                'content_en': """
                    <h2>Data Privacy & Security</h2>
                    
                    <h3>Data Protection Principles:</h3>
                    <ul>
                        <li>All patient data is confidential and protected</li>
                        <li>Access is granted based on role and need-to-know basis</li>
                        <li>Data is encrypted in transit and at rest</li>
                        <li>All access is logged and auditable</li>
                    </ul>
                    
                    <h3>User Responsibilities:</h3>
                    <ul>
                        <li>Keep your password secure and do not share it</li>
                        <li>Log out when leaving your workstation</li>
                        <li>Report any suspected security incidents immediately</li>
                        <li>Access only the data you need for your role</li>
                    </ul>
                """,
                'content_ar': """
                    <h2>خصوصية البيانات والأمان</h2>
                    
                    <h3>مبادئ حماية البيانات:</h3>
                    <ul>
                        <li>جميع بيانات المرضى سرية ومحمية</li>
                        <li>يتم منح الوصول بناءً على الدورة والحاجة للمعرفة</li>
                        <li>يتم تشفير البيانات أثناء النقل والتخزين</li>
                        <li>جميع عمليات الوصول مسجلة وقابلة للتدقيق</li>
                    </ul>
                    
                    <h3>مسؤوليات المستخدم:</h3>
                    <ul>
                        <li>احتفظ بكلمة المرور آمنة ولا تشاركها مع أحد</li>
                        <li>قم بتسجيل الخروج عند مغادرة محطة العمل</li>
                        <li>أبلغ عن أي حوادث أمنية مشتبه بها فورًا</li>
                        <li>الوصول فقط إلى البيانات التي تحتاجها لدورك</li>
                    </ul>
                """
            },
            {
                'code': 'SYSTEM_USAGE',
                'order': 3,
                'title_en': 'System Usage Guidelines',
                'title_ar': 'إرشادات استخدام النظام',
                'description_en': 'Best practices for using PX360 effectively',
                'description_ar': 'أفضل الممارسات لاستخدام PX360 بشكل فعال',
                'content_en': """
                    <h2>System Usage Guidelines</h2>
                    
                    <h3>Best Practices:</h3>
                    <ul>
                        <li><strong>Regular Updates:</strong> Check dashboards daily for updates</li>
                        <li><strong>Timely Actions:</strong> Respond to patient feedback and complaints promptly</li>
                        <li><strong>Accurate Data:</strong> Ensure all entered data is accurate and complete</li>
                        <li><strong>Communication:</strong> Use the system for all official communications</li>
                    </ul>
                    
                    <h3>Support:</h3>
                    <p>If you need assistance:</p>
                    <ul>
                        <li>Contact your department manager</li>
                        <li>Submit a support ticket through the help center</li>
                        <li>Refer to the user documentation</li>
                    </ul>
                """,
                'content_ar': """
                    <h2>إرشادات استخدام النظام</h2>
                    
                    <h3>أفضل الممارسات:</h3>
                    <ul>
                        <li><strong>التحديثات المنتظمة:</strong> تحقق من لوحات التحكم يوميًا للحصول على التحديثات</li>
                        <li><strong>الإجراءات في الوقت المناسب:</strong> استجب لملاحظات وشكاوى المرضى بسرعة</li>
                        <li><strong>البيانات الدقيقة:</strong> تأكد من أن جميع البيانات المدخلة دقيقة ومكتملة</li>
                        <li><strong>التواصل:</strong> استخدم النظام لجميع الاتصالات الرسمية</li>
                    </ul>
                    
                    <h3>الدعم:</h3>
                    <p>إذا كنت بحاجة إلى المساعدة:</p>
                    <ul>
                        <li>اتصل بمدير قسمك</li>
                        <li>قدم تذكرة دعم من خلال مركز المساعدة</li>
                        <li>راجع وثائق المستخدم</li>
                    </ul>
                """
            }
        ]

        for content_data in contents:
            AcknowledgementContent.objects.update_or_create(
                code=content_data['code'],
                role=role,
                defaults=content_data
            )

        # Create checklist items for generic content
        intro_content = AcknowledgementContent.objects.get(code='INTRO_PX360')
        privacy_content = AcknowledgementContent.objects.get(code='DATA_PRIVACY')
        usage_content = AcknowledgementContent.objects.get(code='SYSTEM_USAGE')

        checklist_items = [
            {
                'content': intro_content,
                'code': 'INTRO_ACK',
                'order': 1,
                'text_en': 'I have reviewed the PX360 system overview',
                'text_ar': 'لقد راجعت نظرة عامة على نظام PX360',
                'description_en': 'Confirm that you understand the system purpose and key features',
                'description_ar': 'أكد أنك تفهم الغرض من النظام والميزات الرئيسية',
                'is_required': True
            },
            {
                'content': privacy_content,
                'code': 'PRIVACY_ACK',
                'order': 1,
                'text_en': 'I acknowledge and agree to the data privacy and security policies',
                'text_ar': 'أعترف وأوافق على سياسات خصوصية البيانات والأمان',
                'description_en': 'Confirm that you understand your responsibilities regarding data protection',
                'description_ar': 'أكد أنك تفهم مسؤولياتك فيما يتعلق بحماية البيانات',
                'is_required': True
            },
            {
                'content': privacy_content,
                'code': 'PRIVACY_PASSWORD',
                'order': 2,
                'text_en': 'I will keep my password secure and report any security incidents',
                'text_ar': 'سأحتفظ بكلمة المرور آمنة وسأبلغ عن أي حوادث أمنية',
                'description_en': 'Commit to password security and incident reporting',
                'description_ar': 'الالتزام بأمان كلمة المرور والإبلاغ عن الحوادث',
                'is_required': True
            },
            {
                'content': usage_content,
                'code': 'USAGE_ACK',
                'order': 1,
                'text_en': 'I will follow system usage guidelines and best practices',
                'text_ar': 'سأتبع إرشادات استخدام النظام وأفضل الممارسات',
                'description_en': 'Commit to using the system effectively and responsibly',
                'description_ar': 'الالتزام باستخدام النظام بفعالية ومسؤولية',
                'is_required': True
            }
        ]

        for item_data in checklist_items:
            AcknowledgementChecklistItem.objects.update_or_create(
                code=item_data['code'],
                defaults=item_data
            )

    def _create_px_admin_content(self):
        """Create PX Admin specific content"""
        try:
            role = Role.objects.get(name='PX_ADMIN')
        except Role.DoesNotExist:
            self.stdout.write(self.style.WARNING('PX Admin role not found, skipping PX Admin content'))
            return

        self.stdout.write('Creating PX Admin content...')

        content_data = {
            'code': 'PX_ADMIN_RESP',
            'role': role,
            'order': 4,
            'title_en': 'PX Admin Responsibilities',
            'title_ar': 'مسؤوليات مسؤول PX',
            'description_en': 'Understanding PX Admin role and permissions',
            'description_ar': 'فهم دور وصلاحيات مسؤول PX',
            'content_en': """
                <h2>PX Admin Responsibilities</h2>
                <p>As a PX Admin, you have full access to all system features and are responsible for:</p>
                <ul>
                    <li>User and role management</li>
                    <li>System configuration</li>
                    <li>Audit and compliance</li>
                    <li>Content management for acknowledgements</li>
                    <li>Organizational settings</li>
                </ul>
                <p><strong>Note:</strong> With great power comes great responsibility. All your actions are logged and audited.</p>
            """,
            'content_ar': """
                <h2>مسؤوليات مسؤول PX</h2>
                <p>بصفتك مسؤول PX، لديك حق الوصول الكامل إلى جميع ميزات النظام ومسؤول عن:</p>
                <ul>
                    <li>إدارة المستخدمين والأدوار</li>
                    <li>تكوين النظام</li>
                    <li>التدقيق والامتثال</li>
                    <li>إدارة المحتوى للاعترافات</li>
                    <li>إعدادات المؤسسة</li>
                </ul>
                <p><strong>ملاحظة:</strong> مع السلطة العالية تأتي المسؤولية الكبيرة. جميع إجراءاتك مسجلة وقابلة للتدقيق.</p>
            """
        }

        content, _ = AcknowledgementContent.objects.update_or_create(
            code=content_data['code'],
            role=role,
            defaults=content_data
        )

        checklist_items = [
            {
                'content': content,
                'code': 'PX_ADMIN_OVERSIGHT',
                'order': 1,
                'text_en': 'I understand my role as PX Admin and will use permissions responsibly',
                'text_ar': 'أفهم دوري كمسؤول PX وسأستخدم الصلاحيات بمسؤولية',
                'description_en': 'Accept responsibility for PX Admin role',
                'description_ar': 'قبول المسؤولية لدور مسؤول PX',
                'is_required': True
            }
        ]

        for item_data in checklist_items:
            AcknowledgementChecklistItem.objects.update_or_create(
                code=item_data['code'],
                defaults=item_data
            )

    def _create_hospital_admin_content(self):
        """Create Hospital Admin specific content"""
        try:
            role = Role.objects.get(name='HOSPITAL_ADMIN')
        except Role.DoesNotExist:
            return

        self.stdout.write('Creating Hospital Admin content...')

        content_data = {
            'code': 'HOSPITAL_ADMIN_RESP',
            'role': role,
            'order': 4,
            'title_en': 'Hospital Admin Responsibilities',
            'title_ar': 'مسؤوليات مدير المستشفى',
            'description_en': 'Understanding Hospital Admin role and scope',
            'description_ar': 'فهم دور ونطاق مدير المستشفى',
            'content_en': """
                <h2>Hospital Admin Responsibilities</h2>
                <p>As a Hospital Admin, you can manage users, view reports, and oversee operations within your hospital.</p>
                <ul>
                    <li>Manage hospital-level settings</li>
                    <li>Oversee department operations</li>
                    <li>Access comprehensive analytics</li>
                    <li>Manage hospital staff</li>
                </ul>
            """,
            'content_ar': """
                <h2>مسؤوليات مدير المستشفى</h2>
                <p>بصفتك مدير المستشفى، يمكنك إدارة المستخدمين وعرض التقارير والإشراف على العمليات داخل مستشفاك.</p>
                <ul>
                    <li>إدارة إعدادات مستوى المستشفى</li>
                    <li>الإشراف على عمليات الأقسام</li>
                    <li>الوصول إلى تحليلات شاملة</li>
                    <li>إدارة موظفي المستشفى</li>
                </ul>
            """
        }

        content, _ = AcknowledgementContent.objects.update_or_create(
            code=content_data['code'],
            role=role,
            defaults=content_data
        )

        checklist_items = [
            {
                'content': content,
                'code': 'HOSPITAL_ADMIN_SCOPE',
                'order': 1,
                'text_en': 'I understand my Hospital Admin role and hospital-level responsibilities',
                'text_ar': 'أفهم دوري كمدير مستشفى ومسؤولياتي على مستوى المستشفى',
                'description_en': 'Accept responsibility for Hospital Admin role',
                'description_ar': 'قبول المسؤولية لدور مدير المستشفى',
                'is_required': True
            }
        ]

        for item_data in checklist_items:
            AcknowledgementChecklistItem.objects.update_or_create(
                code=item_data['code'],
                defaults=item_data
            )

    def _create_department_manager_content(self):
        """Create Department Manager specific content"""
        try:
            role = Role.objects.get(name='DEPARTMENT_MANAGER')
        except Role.DoesNotExist:
            return

        self.stdout.write('Creating Department Manager content...')

        content_data = {
            'code': 'DEPT_MGR_RESP',
            'role': role,
            'order': 4,
            'title_en': 'Department Manager Responsibilities',
            'title_ar': 'مسؤوليات مدير القسم',
            'description_en': 'Understanding Department Manager role and operations',
            'description_ar': 'فهم دور وعمليات مدير القسم',
            'content_en': """
                <h2>Department Manager Responsibilities</h2>
                <p>As a Department Manager, you oversee your department's operations and staff performance.</p>
                <ul>
                    <li>Manage department staff</li>
                    <li>Monitor department metrics</li>
                    <li>Respond to department-specific feedback</li>
                    <li>Improve patient experience in your area</li>
                </ul>
            """,
            'content_ar': """
                <h2>مسؤوليات مدير القسم</h2>
                <p>بصفتك مدير القسم، تشرف على عمليات قسمك وأداء الموظفين.</p>
                <ul>
                    <li>إدارة موظفي القسم</li>
                    <li>مراقبة مؤشرات القسم</li>
                    <li>الرد على الملاحظات الخاصة بالقسم</li>
                    <li>تحسين تجربة المريض في منطقتك</li>
                </ul>
            """
        }

        content, _ = AcknowledgementContent.objects.update_or_create(
            code=content_data['code'],
            role=role,
            defaults=content_data
        )

        checklist_items = [
            {
                'content': content,
                'code': 'DEPT_MGR_SCOPE',
                'order': 1,
                'text_en': 'I understand my Department Manager role and responsibilities',
                'text_ar': 'أفهم دوري ومسؤولياتي كمدير قسم',
                'description_en': 'Accept responsibility for Department Manager role',
                'description_ar': 'قبول المسؤولية لدور مدير القسم',
                'is_required': True
            }
        ]

        for item_data in checklist_items:
            AcknowledgementChecklistItem.objects.update_or_create(
                code=item_data['code'],
                defaults=item_data
            )

    def _create_physician_content(self):
        """Create Physician specific content"""
        try:
            role = Role.objects.get(name='PHYSICIAN')
        except Role.DoesNotExist:
            return

        self.stdout.write('Creating Physician content...')

        content_data = {
            'code': 'PHYSICIAN_RESP',
            'role': role,
            'order': 4,
            'title_en': 'Physician Responsibilities',
            'title_ar': 'مسؤوليات الطبيب',
            'description_en': 'Understanding Physician role in PX360',
            'description_ar': 'فهم دور الطبيب في PX360',
            'content_en': """
                <h2>Physician Responsibilities</h2>
                <p>As a Physician, you play a key role in patient experience and quality of care.</p>
                <ul>
                    <li>Review and respond to patient feedback</li>
                    <li>Maintain accurate physician profile</li>
                    <li>Participate in quality initiatives</li>
                    <li>Improve patient care based on insights</li>
                </ul>
            """,
            'content_ar': """
                <h2>مسؤوليات الطبيب</h2>
                <p>بصفتك طبيبًا، تلعب دورًا رئيسيًا في تجربة المريض وجودة الرعاية.</p>
                <ul>
                    <li>مراجعة والرد على ملاحظات المرضى</li>
                    <li>الحفاظ على ملف الطبيب بدقة</li>
                    <li>المشاركة في مبادرات الجودة</li>
                    <li>تحسين رعاية المرضى بناءً على الرؤى</li>
                </ul>
            """
        }

        content, _ = AcknowledgementContent.objects.update_or_create(
            code=content_data['code'],
            role=role,
            defaults=content_data
        )

        checklist_items = [
            {
                'content': content,
                'code': 'PHYSICIAN_SCOPE',
                'order': 1,
                'text_en': 'I understand my Physician role and commitment to patient care',
                'text_ar': 'أفهم دوري كطبيب والالتزام برعاية المرضى',
                'description_en': 'Accept responsibility for Physician role',
                'description_ar': 'قبول المسؤولية لدور الطبيب',
                'is_required': True
            }
        ]

        for item_data in checklist_items:
            AcknowledgementChecklistItem.objects.update_or_create(
                code=item_data['code'],
                defaults=item_data
            )

    def _create_staff_content(self):
        """Create Staff specific content"""
        try:
            role = Role.objects.get(name='STAFF')
        except Role.DoesNotExist:
            return

        self.stdout.write('Creating Staff content...')

        content_data = {
            'code': 'STAFF_RESP',
            'role': role,
            'order': 4,
            'title_en': 'Staff Responsibilities',
            'title_ar': 'مسؤوليات الموظف',
            'description_en': 'Understanding Staff role and daily operations',
            'description_ar': 'فهم دور الموظف والعمليات اليومية',
            'content_en': """
                <h2>Staff Responsibilities</h2>
                <p>As a Staff member, you contribute to daily operations and patient experience.</p>
                <ul>
                    <li>Complete assigned tasks efficiently</li>
                    <li>Report patient feedback and concerns</li>
                    <li>Follow established procedures</li>
                    <li>Maintain high service standards</li>
                </ul>
            """,
            'content_ar': """
                <h2>مسؤوليات الموظف</h2>
                <p>بصفتك موظفًا، تساهم في العمليات اليومية وتجربة المريض.</p>
                <ul>
                    <li>إكمال المهام المخصصة بكفاءة</li>
                    <li>الإبلاغ عن ملاحظات ومخاوف المرضى</li>
                    <li>اتباع الإجراءات المعمول بها</li>
                    <li>الحفاظ على معايير خدمة عالية</li>
                </ul>
            """
        }

        content, _ = AcknowledgementContent.objects.update_or_create(
            code=content_data['code'],
            role=role,
            defaults=content_data
        )

        checklist_items = [
            {
                'content': content,
                'code': 'STAFF_SCOPE',
                'order': 1,
                'text_en': 'I understand my Staff role and commitment to quality service',
                'text_ar': 'أفهم دوري كموظف والالتزام بخدمة عالية الجودة',
                'description_en': 'Accept responsibility for Staff role',
                'description_ar': 'قبول المسؤولية لدور الموظف',
                'is_required': True
            }
        ]

        for item_data in checklist_items:
            AcknowledgementChecklistItem.objects.update_or_create(
                code=item_data['code'],
                defaults=item_data
            )
