from django.contrib.auth.models import User
from vacations.models import Company, CostCenter, EmployeeProfile
from datetime import datetime, timedelta

def run():
    print('Creating test data...')
    
    # Create Companies
    print('Creating companies...')
    companies = [
        Company.objects.create(name='Kuttner do Brasil', cnpj='12.345.678/0001-01', address='Av. Brasil, 123 - São Paulo/SP'),
        Company.objects.create(name='Kuttner Automação', cnpj='23.456.789/0001-02', address='Rua das Flores, 456 - Belo Horizonte/MG'),
        Company.objects.create(name='Kuttner Siderúrgica', cnpj='34.567.890/0001-03', address='Av. Industrial, 789 - Rio de Janeiro/RJ')
    ]

    # Create Cost Centers
    print('Creating cost centers...')
    cost_centers = [
        CostCenter.objects.create(company=companies[0], code='KBRA-TI', name='Tecnologia da Informação'),
        CostCenter.objects.create(company=companies[0], code='KBRA-RH', name='Recursos Humanos'),
        CostCenter.objects.create(company=companies[1], code='KAUT-ENG', name='Engenharia'),
        CostCenter.objects.create(company=companies[1], code='KAUT-PROD', name='Produção'),
        CostCenter.objects.create(company=companies[2], code='KSID-ADM', name='Administrativo'),
        CostCenter.objects.create(company=companies[2], code='KSID-FIN', name='Financeiro')
    ]

    # Create Employees with different roles
    print('Creating users and employee profiles...')
    
    # HR Admin
    hr_user = User.objects.create_user(username='hruser', email='hr@kuttner.com.br', password='hrpassword')
    hr_user.first_name = 'Ana'
    hr_user.last_name = 'Silva'
    hr_user.save()

    EmployeeProfile.objects.create(
        user=hr_user,
        role=EmployeeProfile.USER_ROLE_ADMIN,
        company=companies[0],
        cost_center=cost_centers[1],
        employee_id='1001',
        hire_date=datetime.now() - timedelta(days=730),
        is_active=True
    )

    # Manager
    manager_user = User.objects.create_user(username='manager', email='manager@kuttner.com.br', password='managerpassword')
    manager_user.first_name = 'Carlos'
    manager_user.last_name = 'Oliveira'
    manager_user.save()

    EmployeeProfile.objects.create(
        user=manager_user,
        role=EmployeeProfile.USER_ROLE_MANAGER,
        company=companies[1],
        cost_center=cost_centers[2],
        employee_id='2001',
        hire_date=datetime.now() - timedelta(days=900),
        is_active=True
    )

    # Employee 1
    emp1_user = User.objects.create_user(username='employee1', email='emp1@kuttner.com.br', password='emp1password')
    emp1_user.first_name = 'Roberto'
    emp1_user.last_name = 'Santos'
    emp1_user.save()

    EmployeeProfile.objects.create(
        user=emp1_user,
        role=EmployeeProfile.USER_ROLE_EMPLOYEE,
        company=companies[1],
        cost_center=cost_centers[2],
        employee_id='3001',
        hire_date=datetime.now() - timedelta(days=400),
        is_active=True
    )

    # Employee 2
    emp2_user = User.objects.create_user(username='employee2', email='emp2@kuttner.com.br', password='emp2password')
    emp2_user.first_name = 'Maria'
    emp2_user.last_name = 'Costa'
    emp2_user.save()

    EmployeeProfile.objects.create(
        user=emp2_user,
        role=EmployeeProfile.USER_ROLE_EMPLOYEE,
        company=companies[2],
        cost_center=cost_centers[4],
        employee_id='4001',
        hire_date=datetime.now() - timedelta(days=600),
        is_active=True
    )

    # Make sure admin user has a profile too
    try:
        admin_user = User.objects.get(username='admin')
        if not hasattr(admin_user, 'profile'):
            EmployeeProfile.objects.create(
                user=admin_user,
                role=EmployeeProfile.USER_ROLE_ADMIN,
                company=companies[0],
                cost_center=cost_centers[0],
                employee_id='0001',
                hire_date=datetime.now() - timedelta(days=1000),
                is_active=True
            )
    except User.DoesNotExist:
        print('Admin user not found')

    print('Test data created successfully!')
    print('Users created:')
    print('- HR Admin: username=hruser, password=hrpassword')
    print('- Manager: username=manager, password=managerpassword')
    print('- Employee 1: username=employee1, password=emp1password')
    print('- Employee 2: username=employee2, password=emp2password')
    print('- Admin: username=admin, password=adminpassword')

if __name__ == '__main__':
    run()