# 评论管理命令
# 提供评论反垃圾功能的管理工具

from django.core.management.base import BaseCommand
from django.core.cache import cache


class Command(BaseCommand):
    help = '评论系统管理工具'

    def add_arguments(self, parser):
        parser.add_argument(
            'action',
            type=str,
            choices=['clear_cache', 'unblock_ip', 'show_blocked'],
            help='操作类型：clear_cache(清除缓存), unblock_ip(解封IP), show_blocked(显示被封IP)'
        )
        parser.add_argument(
            '--ip',
            type=str,
            help='IP地址（用于unblock_ip）'
        )

    def handle(self, *args, **options):
        action = options['action']

        if action == 'clear_cache':
            self.clear_comment_cache()
        elif action == 'unblock_ip':
            ip = options.get('ip')
            if not ip:
                self.stdout.write(self.style.ERROR('请使用 --ip 参数指定IP地址'))
                return
            self.unblock_ip(ip)
        elif action == 'show_blocked':
            self.show_blocked_ips()

    def clear_comment_cache(self):
        """清除所有评论相关的缓存"""
        self.stdout.write('正在清除评论缓存...')

        # 无法直接遍历所有缓存键，所以只能提示
        self.stdout.write(self.style.WARNING(
            '注意：由于缓存系统限制，无法自动清除所有评论缓存。\n'
            '如需完全清除，请使用以下命令：\n'
            '  python manage.py shell\n'
            '  >>> from django.core.cache import cache\n'
            '  >>> cache.clear()  # 清除所有缓存\n'
        ))

        self.stdout.write(self.style.SUCCESS('提示已显示'))

    def unblock_ip(self, ip):
        """解封被封禁的IP"""
        blacklist_key = f'ip_blacklist_{ip}'
        count_key = f'ip_comment_count_{ip}'

        # 删除黑名单和计数
        cache.delete(blacklist_key)
        cache.delete(count_key)

        self.stdout.write(self.style.SUCCESS(f'已解封IP: {ip}'))

    def show_blocked_ips(self):
        """显示被封禁的IP列表"""
        self.stdout.write(self.style.WARNING(
            '由于缓存系统限制，无法列出所有被封IP。\n'
            '可以尝试查看应用日志了解被封IP信息。\n'
        ))
