import pytest
from .factory import UserFactory
from app import app,db
from app.config.settings import TestingConfig
from mongoengine import connect,disconnect
from flask_mongoengine import MongoEngine
from mongoengine.connection import _get_db
from flask_jwt_extended import create_access_token, create_refresh_token



@pytest.fixture
def user_model_factory():
    """
    Fixture that return Userfactory object
    """
    return UserFactory.create()

# @pytest.fixture
# def unique_id_mixin_factory():
#     return UniqueIDMixinFactory.create()

@pytest.fixture
def user_model_weak_pass():
    yield UserFactory.create(password="test123")



@pytest.fixture
def user_model_login():
    return UserFactory.create(username="testlogin_user",email="test@test.com",password="(*&jhs11djHkjsd")


@pytest.fixture
def client():
    disconnect()
    app.config.from_object(TestingConfig)  # Use the testing configuration

    # # Establish a connection to the testing database
    connection = connect('pige_testing', host='mongo-database', port=27017)
    
    with app.test_client() as client:
        yield client  # The tests will run using this client fixture
    # connection.drop_database("pige_testing")
    # Clean up: Disconnect from the testing database and drop it
   

@pytest.fixture
def authorize():
    user = UserFactory()
    additional_claims = {
                "is_superuser": user.is_superuser,
                "is_active": user.is_active,
                "is_staff": user.is_staff,
                "is_admin": user.is_admin, 
            }
    data = {"refrech":create_refresh_token(identity=user.email,additional_claims=additional_claims)}
    return data
