from django.core.management.base import BaseCommand
from apps.funcionario.models import Cargo

class Command(BaseCommand):
    help = 'Adiciona, remove ou lista cargos do sistema'

    def add_arguments(self, parser):
        parser.add_argument('action', choices=['add', 'remove', 'list'], help='Ação: add, remove ou list')
        parser.add_argument('cargos', nargs='*', help='Cargos para adicionar ou remover. Para "add", use "Nome:CODIGO".')

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

        if action == 'list':
            cargos_existentes = Cargo.objects.all()
            if not cargos_existentes:
                self.stdout.write(self.style.WARNING("Nenhum cargo encontrado."))
            else:
                self.stdout.write(self.style.SUCCESS("CARGOS EXISTENTES:"))
                for cargo in cargos_existentes:
                    self.stdout.write(f"• {cargo.nome} ({cargo.codigo})")
            return

        if action == 'add':
            for item in cargos:
                try:
                    nome, codigo = item.split(':')
                    if Cargo.objects.filter(codigo=codigo).exists():
                        self.stdout.write(self.style.WARNING(f"⚠️ Cargo '{codigo}' já existe."))
                    else:
                        Cargo.objects.create(nome=nome.strip(), codigo=codigo.strip())
                        self.stdout.write(self.style.SUCCESS(f"✅ Cargo '{nome}' (código: {codigo}) adicionado."))
                except ValueError:
                    self.stdout.write(self.style.ERROR(f"❌ Formato inválido: '{item}'. Use 'Nome:CODIGO'."))

        elif action == 'remove':
            for codigo in cargos:
                try:
                    cargo = Cargo.objects.get(codigo=codigo)
                    cargo.delete()
                    self.stdout.write(self.style.SUCCESS(f"🗑️ Cargo com código '{codigo}' removido."))
                except Cargo.DoesNotExist:
                    self.stdout.write(self.style.WARNING(f"⚠️ Cargo com código '{codigo}' não encontrado."))
