# -*- coding: utf-8 -*-
"""
Views для аутентификации администраторов платформы.
"""
from django.shortcuts import render, redirect
from django.contrib.auth import login, logout
from django.contrib import messages
from django.db import connection

from .forms import PlatformAdminLoginForm
from .models import PlatformAdmin


def platform_login_view(request):
    """
    Страница входа для администраторов платформы.

    Доступна только на public домене.
    """
    # Проверяем что мы на public домене
    schema_name = getattr(connection, 'schema_name', 'public')
    if schema_name != 'public':
        messages.error(request, 'Вход для администраторов платформы доступен только на главном домене.')
        return redirect('/')

    # Если пользователь уже залогинен как PlatformAdmin
    if request.user.is_authenticated and isinstance(request.user, PlatformAdmin):
        return redirect('platform_admin:dashboard')

    if request.method == 'POST':
        form = PlatformAdminLoginForm(request, data=request.POST)
        if form.is_valid():
            user = form.get_user()
            login(request, user, backend='platform_admin.backends.PlatformAdminBackend')
            messages.success(request, f'Добро пожаловать, {user.name}!')

            next_url = request.GET.get('next')
            if next_url:
                return redirect(next_url)
            return redirect('platform_admin:dashboard')
    else:
        form = PlatformAdminLoginForm(request)

    return render(request, 'platform_admin/login.html', {'form': form})


def platform_logout_view(request):
    """
    Выход администратора платформы.
    """
    logout(request)
    messages.info(request, 'Вы вышли из системы.')
    return redirect('platform_admin:login')


def dashboard_view(request):
    """
    Главная страница панели администратора платформы.

    Показывает статистику по тенантам, заявкам и подпискам.
    """
    # Проверяем что пользователь - PlatformAdmin
    if not request.user.is_authenticated or not isinstance(request.user, PlatformAdmin):
        return redirect('platform_admin:login')

    from tenants.models import Client, TenantRegistration, Subscription

    context = {
        'total_tenants': Client.objects.exclude(schema_name='public').count(),
        'active_tenants': Client.objects.filter(is_active=True).exclude(schema_name='public').count(),
        'pending_registrations': TenantRegistration.objects.filter(status='pending').count(),
        'active_subscriptions': Subscription.objects.filter(is_active=True).count(),
    }

    return render(request, 'platform_admin/dashboard.html', context)
