"""
Management command для создания системных статусов заказов.

Использование:
    python manage.py create_order_statuses
    python manage.py create_order_statuses --reset
    python manage.py create_order_statuses --schema grach
"""
from django.core.management.base import BaseCommand
from django.db import connection
from django_tenants.utils import get_tenant_model
from orders.services.order_status_service import OrderStatusService
from orders.models import OrderStatus


class Command(BaseCommand):
    """
    Создает системные статусы заказов для текущего тенанта.
    """
    help = 'Создает системные статусы заказов для текущего тенанта'

    def add_arguments(self, parser):
        """Добавляем опциональные аргументы"""
        parser.add_argument(
            '--reset',
            action='store_true',
            help='Удалить все статусы перед созданием (осторожно!)',
        )
        parser.add_argument(
            '--schema',
            type=str,
            help='Имя схемы тенанта (по умолчанию текущий тенант)',
        )

    def handle(self, *args, **options):
        """Основной обработчик команды"""
        # Если указана схема, переходим на нее
        schema_name = options.get('schema')
        if schema_name:
            Tenant = get_tenant_model()
            try:
                tenant = Tenant.objects.get(schema_name=schema_name)
                connection.set_tenant(tenant)
                self.stdout.write(
                    self.style.SUCCESS(f'Переключился на тенант: {tenant.name}')
                )
            except Tenant.DoesNotExist:
                self.stdout.write(
                    self.style.ERROR(f'Тенант со схемой {schema_name} не найден')
                )
                return

        if options['reset']:
            count = OrderStatus.objects.count()
            self.stdout.write(
                self.style.WARNING(f'Удаляю {count} статусов...')
            )
            OrderStatus.objects.all().delete()

        self.stdout.write('Создаю системные статусы...')

        try:
            OrderStatusService.create_default_statuses()
            self.stdout.write(
                self.style.SUCCESS('Системные статусы успешно созданы')
            )
        except Exception as e:
            self.stdout.write(
                self.style.ERROR(f'Ошибка при создании статусов: {str(e)}')
            )
            return

        # Выводим информацию о созданных статусах
        statuses = OrderStatus.objects.all().order_by('order')
        self.stdout.write(
            self.style.SUCCESS(f'\nВсего создано {statuses.count()} статусов:')
        )

        for status in statuses:
            status_type = 'Системный' if status.is_system else 'Пользовательский'
            end_type = ''
            if status.is_positive_end:
                end_type = ' [Успешный]'
            elif status.is_negative_end:
                end_type = ' [Отрицательный]'

            self.stdout.write(
                f'  - {status.name:<20} ({status.code:<15}) - {status_type}{end_type}'
            )
