from django.core.management.base import BaseCommand
from django.utils import timezone
from datetime import datetime, timedelta
from notifications.models import (
    NotificationCategory, Notification, NotificationTag, 
    NotificationTagRelation, SiteStatistic
)


class Command(BaseCommand):
    help = 'Seed the database with notification and statistics data'

    def handle(self, *args, **options):
        self.stdout.write(self.style.SUCCESS('Starting to seed notification data...'))
        
        # Create categories
        self.create_categories()
        
        # Create tags
        self.create_tags()
        
        # Create notifications
        self.create_notifications()
        
        # Create statistics
        self.create_statistics()
        
        self.stdout.write(self.style.SUCCESS('Successfully seeded notification data!'))

    def create_categories(self):
        categories = [
            {
                'name': 'Admission',
                'description': 'Admission related notifications and updates',
                'color_code': '#e74c3c'
            },
            {
                'name': 'Academic',
                'description': 'Academic programs and educational updates',
                'color_code': '#3498db'
            },
            {
                'name': 'Events',
                'description': 'Campus events and activities',
                'color_code': '#f39c12'
            },
            {
                'name': 'Placement',
                'description': 'Career and placement related information',
                'color_code': '#27ae60'
            },
            {
                'name': 'Research',
                'description': 'Research activities and opportunities',
                'color_code': '#9b59b6'
            },
            {
                'name': 'General',
                'description': 'General announcements and notices',
                'color_code': '#61b239'
            }
        ]
        
        for cat_data in categories:
            category, created = NotificationCategory.objects.get_or_create(
                name=cat_data['name'],
                defaults={
                    'description': cat_data['description'],
                    'color_code': cat_data['color_code']
                }
            )
            if created:
                self.stdout.write(f'Created category: {category.name}')

    def create_tags(self):
        tags = [
            'PhD', 'MBA', 'B.Tech', 'M.Tech', 'Admission', 'Conference', 
            'Research', 'AI', 'Placement', 'International', 'Campus', 
            'Innovation', 'Technology', 'Scholarship', 'Workshop'
        ]
        
        for tag_name in tags:
            tag, created = NotificationTag.objects.get_or_create(name=tag_name)
            if created:
                self.stdout.write(f'Created tag: {tag.name}')

    def create_notifications(self):
        # Get categories and tags
        admission_cat = NotificationCategory.objects.get(name='Admission')
        academic_cat = NotificationCategory.objects.get(name='Academic')
        events_cat = NotificationCategory.objects.get(name='Events')
        placement_cat = NotificationCategory.objects.get(name='Placement')
        research_cat = NotificationCategory.objects.get(name='Research')
        general_cat = NotificationCategory.objects.get(name='General')
        
        # Base date for notifications (recent dates)
        base_date = timezone.now() - timedelta(days=30)
        
        notifications_data = [
            {
                'title': 'Notice Ph.D. Admission Notification Winter Batch: 2024-2025',
                'description': 'Applications are now open for Ph.D. programs in various disciplines for the Winter batch 2024-2025.',
                'content': '''
                <h2>Ph.D. Admission Notification - Winter Batch 2024-2025</h2>
                <p>Roorkee College is pleased to announce the opening of applications for Ph.D. programs across multiple disciplines for the Winter batch 2024-2025.</p>
                
                <h3>Available Programs:</h3>
                <ul>
                    <li>Computer Science & Engineering</li>
                    <li>Mechanical Engineering</li>
                    <li>Electronics & Communication</li>
                    <li>Management Studies</li>
                    <li>Applied Sciences</li>
                </ul>
                
                <h3>Key Dates:</h3>
                <ul>
                    <li>Application Start: November 28, 2024</li>
                    <li>Application End: December 15, 2024</li>
                    <li>Entrance Exam: December 20, 2024</li>
                    <li>Interview: December 25-27, 2024</li>
                </ul>
                
                <h3>Eligibility:</h3>
                <p>Master's degree in relevant field with minimum 60% marks. NET/GATE qualified candidates preferred.</p>
                ''',
                'category': admission_cat,
                'priority': 'high',
                'is_featured': True,
                'published_date': base_date + timedelta(days=28),
                'tags': ['PhD', 'Admission']
            },
            {
                'title': 'MBA Admission Open for January 2025 Intake',
                'description': 'Apply now for MBA programs with specializations in Finance, Marketing, HR, and Operations.',
                'content': '''
                <h2>MBA Admission - January 2025 Intake</h2>
                <p>Join our prestigious MBA program designed to nurture future business leaders.</p>
                
                <h3>Specializations Available:</h3>
                <ul>
                    <li>Finance & Banking</li>
                    <li>Marketing & Sales</li>
                    <li>Human Resource Management</li>
                    <li>Operations Management</li>
                    <li>International Business</li>
                </ul>
                
                <h3>Program Highlights:</h3>
                <ul>
                    <li>Industry-experienced faculty</li>
                    <li>Case study methodology</li>
                    <li>Corporate partnerships</li>
                    <li>Internship opportunities</li>
                    <li>100% placement assistance</li>
                </ul>
                ''',
                'category': admission_cat,
                'priority': 'high',
                'is_featured': True,
                'published_date': base_date + timedelta(days=25),
                'tags': ['MBA', 'Admission']
            },
            {
                'title': 'International Conference on Technology and Innovation',
                'description': 'Two-day international conference featuring renowned speakers from academia and industry.',
                'content': '''
                <h2>International Conference on Technology and Innovation</h2>
                <p>Join us for a prestigious international conference bringing together researchers, academicians, and industry experts.</p>
                
                <h3>Conference Themes:</h3>
                <ul>
                    <li>Artificial Intelligence & Machine Learning</li>
                    <li>Sustainable Technology Solutions</li>
                    <li>Digital Transformation</li>
                    <li>Innovation in Engineering</li>
                    <li>Future of Education Technology</li>
                </ul>
                
                <h3>Keynote Speakers:</h3>
                <ul>
                    <li>Dr. Rajesh Kumar - IIT Delhi</li>
                    <li>Prof. Sarah Johnson - MIT</li>
                    <li>Mr. Amit Sharma - Google India</li>
                </ul>
                ''',
                'category': events_cat,
                'priority': 'medium',
                'is_featured': True,
                'published_date': base_date + timedelta(days=20),
                'tags': ['Conference', 'Technology', 'Innovation', 'International']
            },
            {
                'title': 'New Research Center for Artificial Intelligence Inaugurated',
                'description': 'State-of-the-art AI research center launched with cutting-edge infrastructure and equipment.',
                'content': '''
                <h2>AI Research Center Inauguration</h2>
                <p>We are proud to announce the inauguration of our new Artificial Intelligence Research Center, equipped with the latest technology and infrastructure.</p>
                
                <h3>Facilities Include:</h3>
                <ul>
                    <li>High-performance computing clusters</li>
                    <li>GPU-accelerated workstations</li>
                    <li>Machine learning development labs</li>
                    <li>Collaborative research spaces</li>
                    <li>Industry partnership zones</li>
                </ul>
                
                <h3>Research Focus Areas:</h3>
                <ul>
                    <li>Deep Learning & Neural Networks</li>
                    <li>Computer Vision</li>
                    <li>Natural Language Processing</li>
                    <li>Robotics & Automation</li>
                    <li>AI Ethics & Policy</li>
                </ul>
                ''',
                'category': research_cat,
                'priority': 'medium',
                'is_featured': False,
                'published_date': base_date + timedelta(days=18),
                'tags': ['AI', 'Research', 'Innovation']
            },
            {
                'title': 'Campus Placement Drive: Top Companies Visiting Next Week',
                'description': 'Leading multinational companies scheduled for campus recruitment with attractive packages.',
                'content': '''
                <h2>Campus Placement Drive - Week of December 2-6, 2024</h2>
                <p>We are excited to host top-tier companies for our campus placement drive.</p>
                
                <h3>Participating Companies:</h3>
                <ul>
                    <li>Microsoft India - Software Development</li>
                    <li>Amazon - Cloud Services & Engineering</li>
                    <li>Google - Product Management & Engineering</li>
                    <li>TCS - IT Services & Consulting</li>
                    <li>Infosys - Digital Transformation</li>
                </ul>
                
                <h3>Package Range:</h3>
                <ul>
                    <li>Microsoft: ₹18-25 LPA</li>
                    <li>Amazon: ₹15-22 LPA</li>
                    <li>Google: ₹20-30 LPA</li>
                    <li>TCS: ₹7-12 LPA</li>
                    <li>Infosys: ₹8-15 LPA</li>
                </ul>
                ''',
                'category': placement_cat,
                'priority': 'urgent',
                'is_featured': True,
                'published_date': base_date + timedelta(days=15),
                'tags': ['Placement', 'Campus', 'Technology']
            },
            {
                'title': 'International Student Exchange Program Applications Open',
                'description': 'Apply for student exchange programs with partner universities in USA, Europe, and Asia.',
                'content': '''
                <h2>International Student Exchange Program</h2>
                <p>Expand your horizons with our international student exchange programs.</p>
                
                <h3>Partner Universities:</h3>
                <ul>
                    <li>University of California, Berkeley - USA</li>
                    <li>Technical University of Munich - Germany</li>
                    <li>National University of Singapore - Singapore</li>
                    <li>University of Toronto - Canada</li>
                    <li>Seoul National University - South Korea</li>
                </ul>
                
                <h3>Program Benefits:</h3>
                <ul>
                    <li>Credit transfer system</li>
                    <li>Cultural immersion</li>
                    <li>International exposure</li>
                    <li>Language learning opportunities</li>
                    <li>Global networking</li>
                </ul>
                ''',
                'category': academic_cat,
                'priority': 'medium',
                'is_featured': False,
                'published_date': base_date + timedelta(days=12),
                'tags': ['International', 'Academic', 'Scholarship']
            }
        ]
        
        for i, notif_data in enumerate(notifications_data):
            tags = notif_data.pop('tags', [])
            
            notification, created = Notification.objects.get_or_create(
                title=notif_data['title'],
                defaults=notif_data
            )
            
            if created:
                # Add tags
                for tag_name in tags:
                    tag, _ = NotificationTag.objects.get_or_create(name=tag_name)
                    NotificationTagRelation.objects.get_or_create(
                        notification=notification,
                        tag=tag
                    )
                
                self.stdout.write(f'Created notification: {notification.title}')

    def create_statistics(self):
        statistics_data = [
            {
                'name': 'Years of Educational Experience',
                'value': '15+',
                'description': 'Years of Educational\\nExperience',
                'icon': 'graduation-cap',
                'order': 1
            },
            {
                'name': 'Multidisciplinary Programs',
                'value': '50+',
                'description': 'Multidisciplinary\\nPrograms',
                'icon': 'book-open',
                'order': 2
            },
            {
                'name': 'Companies Visited For Placement',
                'value': '200+',
                'description': 'Companies Visited\\nFor Placement',
                'icon': 'briefcase',
                'order': 3
            },
            {
                'name': 'Glorious Alumni',
                'value': '5K+',
                'description': 'Glorious\\nAlumni',
                'icon': 'users',
                'order': 4
            }
        ]
        
        for stat_data in statistics_data:
            statistic, created = SiteStatistic.objects.get_or_create(
                name=stat_data['name'],
                defaults=stat_data
            )
            if created:
                self.stdout.write(f'Created statistic: {statistic.name}')
