import pytest
from apps.accounts.models import User
from apps.subscriptions.models import Plan
from pytest_factoryboy import register

from .factories import (NormalUserFactory,
                        SuperUserFactory,
                        BasicPlanFactory,
                        PopularPlanFactory,
                        ProPlanFactory,
                        BasicSubscriptionFactory,
                        PopularSubscriptionFactory,
                        ProSubscriptionFactory,
                        )

register(NormalUserFactory)
register(SuperUserFactory)
register(BasicPlanFactory)
register(PopularPlanFactory)
register(ProPlanFactory)
register(BasicSubscriptionFactory)
register(PopularSubscriptionFactory)
register(ProSubscriptionFactory)


@pytest.fixture
def user_signup_data() -> dict:
    data = {
        "first_name": "brahim",
        "last_name": "boughanm",
        "username": "brahim024",
        "email": "boughanm6@gmail.com",
        "password": "brahim024",
    }
    return data


@pytest.fixture
def user_signup_data_paid(client) -> dict:
    data = {

        "first_name": "brahim",
        "last_name": "boughanm",
        "username": "brahim024",
        "email": "ifninos168@gmail.com",
        "password": "brahim024",
        'membership': 'demo'

    }
    return data


@pytest.fixture
def login_user_for_subscribe(db) -> User:
    user = User.objects.create(
        first_name="brahim",
        last_name="boughanm",
        email="boughanm6@gmail.com",
        password="brahim024",
    )
    return user


@pytest.fixture
def generate_user(db, user_factory):
    user = user_factory.create()
    return user


@pytest.fixture
def create_plan(db):
    try:
        Plan.objects.create(
            plan_id='P-JJHS76273713823',
            plan_name='Basic Plan',
            plan_type='Basic',
            describe='Test Subscription',
            duration_days=5,
            price=5,
            videos_per_day=2,
            paymentSource='paypal'
        )
    except Plan.DoesNotExist:
        pass

