from django.core.management.base import BaseCommand
from blog.models import Post, Category
from django.contrib.contenttypes.models import ContentType
from hookmigration.models import Transient
from hookmigration.peewee_models import BlogCategory, BlogPost
import requests
from django.conf import settings
import os
from django.contrib.auth.models import User
from hookmigration.settings import MEDIA_URL


class Command(BaseCommand):
    help = 'Migrate all the blog articles'

    def handle(self, *args, **options):
        author = User.objects.get(username='admin')
        MEDIA_ROOT = getattr(settings, 'MEDIA_ROOT')
        category_content_type = ContentType.objects.get_for_model(Category)
        posts_content_type = ContentType.objects.get_for_model(Post)

        for category in BlogCategory.select():
            c = Category(name=category.name)
            c.save()

            # Transient for blog category
            Transient.objects.create(content_type=category_content_type, old_pk=category.id, new_pk=c.pk)

            for post in category.posts.select():
                # Download and save the image to media dirs
                if post.img:
                    filename = post.img.replace('./', '')
                    main_image = os.path.join(MEDIA_ROOT, 'posts', filename)
                    image = os.path.join(MEDIA_ROOT, 'blogs', filename)
                    content = requests.get(MEDIA_URL.format(filename)).content
                    with open(main_image, 'wb') as file:
                        file.write(content)
                    with open(image, 'wb') as file:
                        file.write(content)

                new_post = Post.objects.create(
                    title=post.title,
                    author=author,
                    preview=post.preview,
                    content=post.content,
                    category=c,
                    image=os.path.relpath(image, MEDIA_ROOT) if post.img else None,
                    main_image=os.path.relpath(main_image, MEDIA_ROOT) if post.img else None,
                    created=post.date_added,
                    updated=post.date_published
                )
                Transient.objects.create(content_type=posts_content_type, old_pk=post.id, new_pk=new_post.pk)
                print(post.title, ' moved!')
