from django.core.management.base import BaseCommand
from django.contrib.auth import get_user_model
from django.utils import timezone

from plans.models import Plan
from domains.models import Domain


User = get_user_model()


class Command(BaseCommand):
    help = "导入演示套餐并可选创建演示域名。使用 --user-id 为指定用户创建域名。"

    def add_arguments(self, parser):
        parser.add_argument('--user-id', type=int, help='为该用户创建示例域名（可选）')

    def handle(self, *args, **options):
        free, _ = Plan.objects.get_or_create(
            name='Free',
            defaults={
                'description': '基础免费套餐，每域名每月包含 15GB。',
                'billing_mode': 'per_domain_monthly',
                'base_price_per_domain': 0,
                'included_traffic_gb_per_domain': 15,
                'overage_price_per_gb': 0.50,
                'allow_overage': True,
                'is_active': True,
                'is_public': True,
                'features': {
                    'waf_enabled': False,
                    'http3_enabled': False,
                    'logs_enabled': False,
                    'websocket_enabled': True,
                }
            }
        )
        pro, _ = Plan.objects.get_or_create(
            name='Pro',
            defaults={
                'description': '专业版，每域名每月包含 200GB，支持更多功能。',
                'billing_mode': 'per_domain_monthly',
                'base_price_per_domain': 49.00,
                'included_traffic_gb_per_domain': 200,
                'overage_price_per_gb': 0.30,
                'allow_overage': True,
                'is_active': True,
                'is_public': True,
                'features': {
                    'waf_enabled': True,
                    'http3_enabled': True,
                    'logs_enabled': True,
                    'websocket_enabled': True,
                }
            }
        )
        self.stdout.write(self.style.SUCCESS(f"已准备套餐：Free({free.id}), Pro({pro.id})"))

        user_id = options.get('user_id')
        if not user_id:
            self.stdout.write(self.style.NOTICE("未提供 --user-id，跳过示例域名创建。"))
            return
        user = User.objects.filter(id=user_id).first()
        if not user:
            self.stdout.write(self.style.ERROR(f"用户 {user_id} 不存在，跳过域名创建。"))
            return

        today = timezone.now().date()
        month_start = today.replace(day=1)
        # 下月第一天
        if month_start.month == 12:
            next_month_start = month_start.replace(year=month_start.year + 1, month=1, day=1)
        else:
            next_month_start = month_start.replace(month=month_start.month + 1, day=1)
        current_cycle_end = next_month_start - timezone.timedelta(days=1)

        d, created = Domain.objects.get_or_create(
            user=user,
            name='example.com',
            defaults={
                'status': Domain.STATUS_PENDING,
                'current_plan': free,
                'current_cycle_start': month_start,
                'current_cycle_end': current_cycle_end,
                'cname_targets': {'www.example.com': 'www.cdn.example.com'},
                'origin_config': {'host': 'origin.example.com', 'protocol': 'http', 'port': 80},
                'edge_server_id': None,
            }
        )
        if created:
            self.stdout.write(self.style.SUCCESS(f"已创建演示域名：{d.name}（用户ID {user.id}）"))
        else:
            self.stdout.write(self.style.WARNING(f"演示域名已存在：{d.name}（用户ID {user.id}）"))