
import requests
from main.models import Links, SiteSettings


def check_robot(request):
    result = {}
    setts = SiteSettings.objects.all().last()
    if setts.use_recaptcha:
        try:
            recaptcha_response = request.POST.get('g-recaptcha-response')

            url = 'https://www.google.com/recaptcha/api/siteverify'
            values = {
                'secret': setts.recaptcha_secret_key,
                'response': recaptcha_response
            }
            r = requests.post(url, data=values, verify=False, timeout=30)
            result = r.json()
        except Exception as e:
            result = {'success': False}
    else:
        result['success'] = True
    return result


def get_theme(setts, path):
    if path in ["/master/login/", "/master/login/submit/"]:
        return setts.main_theme_address
    if path.startswith("/master"):
        return setts.master_theme_address
    else:
        return setts.main_theme_address

def get_page_name(request):
    name = request.resolver_match.view_name
    try: return Links.objects.get(views=name).name
    except: return ""

def get_menu(request, setting):
    user = request.user
    view_name = request.resolver_match.view_name
    links = []
    link_related = list(Links.objects.filter(views=view_name).exclude(related_link=None).values_list('related_link', flat=True))
    if view_name.startswith("master_"):
        if menu := setting.master_menu:
            for link in menu.links.all():
                s1_active = False
                s2_active = False
                active = False
                v1 = None
                v2 = None
                v3 = None
                l1 = {}
                if link.permission is None or (link.permission and user.has_perm(f"auth.{link.permission.codename}")):
                    m2 = []
                    for s1_link in link.sub_links.all():
                        l2 = {}
                        if s1_link.permission is None or (s1_link.permission and user.has_perm(f"auth.{s1_link.permission.codename}")):
                            m3 = []
                            for s2_link in s1_link.sub_links.all():
                                l3 = {}
                                if s2_link.permission is None or (s2_link.permission and user.has_perm(f"auth.{s2_link.permission.codename}")):
                                    v3 = s2_link.views
                                    active = v3 == view_name
                                    if not active:
                                        if s2_link.id in link_related:
                                            active = True
                                    if active: s2_active = True
                                    l3['id'] = s2_link.id
                                    l3['name'] = s2_link.name
                                    l3['name_en'] = s2_link.name_en
                                    l3['link'] = s2_link.link
                                    l3['icon'] = s2_link.icon
                                    l3['views'] = v3
                                    l3['active'] = active
                                    m3.append(l3)
                            v2 = s1_link.views
                            if len(m3) > 0 or (s1_link.permission is None or (s1_link.permission and user.has_perm(f"auth.{s1_link.permission.codename}"))):
                                active = s2_active or (v2 == view_name)
                                if not active:
                                    if s1_link.id in link_related:
                                        active = True
                                if active: s1_active = True
                                l2['id'] = s1_link.id
                                l2['name'] = s1_link.name
                                l2['name_en'] = s1_link.name_en
                                l2['link'] = s1_link.link
                                l2['icon'] = s1_link.icon
                                l2['views'] = v2
                                l2['active'] = active
                                if len(m3) > 0:
                                    l2['sub_menu'] = m3
                                m2.append(l2)
                    if len(m2) > 0: 
                        v1 = link.views
                        active = s1_active or (v1 == view_name)
                        l1['id'] = link.id
                        l1['name'] = link.name
                        l1['name_en'] = link.name_en
                        l1['link'] = link.link
                        l1['icon'] = link.icon
                        l1['views'] = v1
                        l1['active'] = active
                        l1['sub_menu'] = m2
                        links.append(l1)    


            if len(links) > 0 and not any(item['active'] for item in links):
                links[0]['active']=True
                links[0]['sub_menu'][0]['active']=True
                if len(links[0]['sub_menu'][0]) > 0 and 'sub_menu' in links[0]['sub_menu'][0]:
                    links[0]['sub_menu'][0]['sub_menu'][0]['active']=True
    return links


def get_settings(request):
    user = request.user
    path = request.path_info
    setts = SiteSettings.objects.all().last()
    if setts is not None:
        menu = get_menu(request, setts)
        theme = get_theme(setts,path)
        setts.theme_name = theme
        setts.theme_menu = menu
        setts.page_name = ""
    return setts
