
from django.core.management.base import BaseCommand
from django.conf import settings
from settings.models import SystemSettings

class Command(BaseCommand):
    help = 'Setup initial email settings in database'

    def add_arguments(self, parser):
        parser.add_argument('--host', type=str, help='SMTP host')
        parser.add_argument('--port', type=int, default=587, help='SMTP port')
        parser.add_argument('--username', type=str, help='SMTP username')
        parser.add_argument('--password', type=str, help='SMTP password')
        parser.add_argument('--use-tls', action='store_true', help='Use TLS')
        parser.add_argument('--from-email', type=str, help='Default from email')

    def handle(self, *args, **options):
        self.stdout.write(self.style.SUCCESS('Setting up email configuration...'))

        # Default email settings
        email_settings = [
            ('HOST', options.get('host') or 'mail.optinet.co.ke', 'SMTP Host'),
            ('PORT', str(options.get('port') or 587), 'SMTP Port'),
            ('HOST_USER', options.get('username') or '', 'SMTP Username'),
            ('HOST_PASSWORD', options.get('password') or '', 'SMTP Password'),
            ('USE_TLS', 'true' if options.get('use_tls') else 'true', 'Use TLS'),
            ('USE_SSL', 'false', 'Use SSL'),
            ('DEFAULT_FROM_EMAIL', options.get('from_email') or 'noreply@optinet.co.ke', 'Default From Email'),
            ('TIMEOUT', '30', 'Connection Timeout'),
        ]

        for key, value, description in email_settings:
            if value:  # Only create settings with values
                setting, created = SystemSettings.objects.update_or_create(
                    category='email',
                    key=key,
                    defaults={
                        'value': value,
                        'description': description,
                        'is_sensitive': key in ['HOST_PASSWORD'],
                        'is_required': key in ['HOST', 'HOST_USER', 'HOST_PASSWORD']
                    }
                )
                
                if created:
                    self.stdout.write(f'Created email setting: {key}')
                else:
                    self.stdout.write(f'Updated email setting: {key}')

        self.stdout.write(self.style.SUCCESS('\nEmail settings configured successfully!'))
        self.stdout.write('\nNext steps:')
        self.stdout.write('1. Go to Settings dashboard to verify configuration')
        self.stdout.write('2. Update HOST_PASSWORD if needed')
        self.stdout.write('3. Test email configuration')
        
        # Show current configuration
        self.stdout.write('\nCurrent email configuration:')
        for setting in SystemSettings.objects.filter(category='email'):
            if setting.is_sensitive:
                value = '••••••••' if setting.value else 'Not set'
            else:
                value = setting.value or 'Not set'
            self.stdout.write(f'  {setting.key}: {value}')
