from django.urls import reverse
from django.shortcuts import render, redirect
import pytest
import factory
from apps.accounts.models import User
import json
from django.core import mail
from termcolor import colored
from apps.subscriptions.models import Plan
from faker import Faker
import random
from pytest_factoryboy import register
from apps.process.tests.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)


faker = Faker()

    
@pytest.fixture
def user_signup_data(client,basic_plan_factory) -> dict:
    basic_plan_factory.create(plan_id="P-2E356653NJ554300BML54IQY")
    session = client.session
    user_password = factory.LazyFunction(lambda: make_password('pi3.1415'))
    session['plan']='basic'
    data = {
        "first_name": faker.first_name(),
        "last_name": faker.last_name(),
        "email": faker.email(),
        "username":faker.name(),
        "password": user_password,
        'membership':'P-2E356653NJ554300BML54IQY',
        'session':session['plan']
    }
    return data


@pytest.fixture
def user_signup_data_already_signup(client,normal_user_factory,basic_plan_factory) -> dict:
    basic_plan_factory.create(plan_id="P-2E356653NJ554300BML54IQY")
    user_email = faker.email()
    normal_user_factory.create(email=user_email)
    session = client.session
    session['plan']='demo'
    data = {
        "first_name": "brahim",
        "last_name": "boughanm",
        "username": "brahim024",
        "email": user_email,
        "password": factory.LazyFunction(lambda: make_password('pi3.1415')),
        'session':session['plan'],
        'plan': session['plan'],
        'OrderID': '8071106362699621P',
        'ConversationID': 'A21AALrDjl8qdG3psAL0OXp18uWQ7qdlOcH0IpMKMEF6COtX0JcABunbkfEElf1s43scSCGgZ2HZzo-POo4n-6ofljlg5faCw',
        "SubscriptionID": "I-8XRDX14S7AW3",
        "PlanID": "P-2E356653NJ554300BML54IQY"
    }
    return data

@pytest.fixture
def user_signup_data_with_order_id(client,basic_plan_factory) -> dict:
    basic_plan = basic_plan_factory.create(plan_id="P-2E356653NJ554300BML54IQY")
    session = client.session
    session['plan']='P-2E356653NJ554300BML54IQY'
    data = {
        "first_name": faker.first_name(),
        "last_name": faker.last_name(),
        "email": faker.email(),
        "password": factory.LazyFunction(lambda: make_password('pi3.1415')),
        'plan':session['plan'],
        'OrderID':'8071106362699621P',
        'ConversationID':'A21AALrDjl8qdG3psAL0OXp18uWQ7qdlOcH0IpMKMEF6COtX0JcABunbkfEElf1s43scSCGgZ2HZzo-POo4n-6ofljlg5faCw',
        "SubscriptionID":"I-8XRDX14S7AW3",
        "PlanID":"P-2E356653NJ554300BML54IQY"
    }
    return data


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

def plan_random():
    sequence = ['demo','P-2E356653NJ554300BML54IUY','P-2E356653NJ554300BML54IQY']
    return random.choice(sequence)
    