from datetime import timedelta

from django.db import migrations
from django.utils import timezone

TARGET_EMAIL = 'calebcaltezmwas@gmail.com'

TEMPLATE_DATA = {
    'name': 'Holyhands Premium',
    'category': 'luxury',
    'price': 500,
    'usage_limit': None,
    'min_tier_required': 'premium',
    'layout': {'style': 'luxury', 'primary_color': '#1b3b8c', 'accent_color': '#eec93e', 'font': 'serif'},
}


def seed_holyhands_premium(apps, schema_editor):
    InvoiceTemplate = apps.get_model('templates', 'InvoiceTemplate')
    PurchasedTemplate = apps.get_model('templates', 'PurchasedTemplate')
    User = apps.get_model('accounts', 'User')
    SubscriptionPlan = apps.get_model('accounts', 'SubscriptionPlan')
    UserSubscription = apps.get_model('accounts', 'UserSubscription')

    template, _ = InvoiceTemplate.objects.get_or_create(
        name=TEMPLATE_DATA['name'], defaults=TEMPLATE_DATA
    )

    user = User.objects.filter(email=TARGET_EMAIL).select_related('company').first()
    if user is None or user.company_id is None:
        return

    premium_plan = SubscriptionPlan.objects.filter(tier='premium').first()
    if premium_plan is not None:
        now = timezone.now()
        UserSubscription.objects.filter(user=user, status='active').update(status='cancelled', ends_at=now)
        UserSubscription.objects.create(
            user=user, plan=premium_plan, status='active', starts_at=now, ends_at=now + timedelta(days=30)
        )

    PurchasedTemplate.objects.get_or_create(
        user=user, template=template, defaults={'company': user.company, 'uses_remaining': None}
    )

    user.company.default_template = template
    user.company.save(update_fields=['default_template'])


def unseed_holyhands_premium(apps, schema_editor):
    InvoiceTemplate = apps.get_model('templates', 'InvoiceTemplate')
    PurchasedTemplate = apps.get_model('templates', 'PurchasedTemplate')
    User = apps.get_model('accounts', 'User')

    template = InvoiceTemplate.objects.filter(name=TEMPLATE_DATA['name']).first()
    if template is None:
        return

    user = User.objects.filter(email=TARGET_EMAIL).select_related('company').first()
    if user is not None and user.company_id is not None and user.company.default_template_id == template.id:
        user.company.default_template = None
        user.company.save(update_fields=['default_template'])

    PurchasedTemplate.objects.filter(template=template).delete()
    template.delete()


class Migration(migrations.Migration):
    dependencies = [
        ('templates', '0003_seed_template_layouts'),
        ('accounts', '0006_company_default_template'),
        ('accounts', '0003_seed_subscription_plans'),
    ]

    operations = [
        migrations.RunPython(seed_holyhands_premium, unseed_holyhands_premium),
    ]
