from openai import OpenAI
import environ
import requests
from django.utils.text import slugify
from blog.models import Keyword, News, TitleOfBlog
from main.models import Language
from main.utils import log_func
env = environ.Env()
environ.Env.read_env()

openai_key = env.str('openai_key')
openai_pr_id = env.str('openai_pr_id')
openai_org_id = env.str('openai_org_id')

BLOG_PROMPT = '''Give me an concise and clear article about the following subject with html tags in {language} language, only the relevant part and without html, head, body, which is related to real estate consulting, and if possible, the name Entralon (by https://entralon.com link) will be mentioned as a real estate consultant website. You can use the https://www.zoopla.co.uk, https://1newhomes.com and https://www.buildington.co.uk/ websites.
{text}
'''

def create_blog_article(text, prompt=BLOG_PROMPT, language="english", model="gpt-4o-mini"):
    try:
        client = OpenAI(
            api_key=openai_key,
        )
        prompt = prompt.format(text=text, language=language)
        chat = client.chat.completions.create(
            model = model,
            messages = [{"role": "user", "content": prompt}],
            temperature = 0.7
        )
    
        return chat.choices[0].message.content
    except Exception as e:
        log_func("create_blog_post", e)
        return None
    
def create_image(prompt):
    try:
        client = OpenAI(api_key=openai_key,)
        response = client.images.generate(
            model="dall-e-3",
            prompt=prompt,
            size="1792x1024",
            quality="standard",
            n=1,
        )
        return response.data[0].url
    except Exception as e:
        log_func("create_image", e)
        return None
    

def check_blog_post():
    t = TitleOfBlog.objects.filter(is_created=False).last()
    text = t.title
    prompt = t.prompt or BLOG_PROMPT
    language = "english"
    model="gpt-4o-mini"
    blog_title = t.title
    blog_slug = slugify(blog_title)
    blog_text = ""
    blog_keywords = ""
    blog_language = Language.objects.get(code="en")
    news = News.objects.create(title=blog_title, slug=blog_slug)
    try:
        client = OpenAI(
            api_key=openai_key,
        )
        prompt = prompt.format(text=text, language=language)
        chat_text = client.chat.completions.create(
            model = model,
            messages = [{"role": "user", "content": prompt}],
            temperature = 0.7
        )
    
        news.text = chat_text.choices[0].message.content
        news.save()
        chat_keyword = client.chat.completions.create(
            model = model,
            messages = [{"role": "user", "content": "Suggest some keywords for this article, separated by commas"}],
            temperature = 0.7
        )
        blog_keywords = chat_keyword.choices[0].message.content
        
        for k in blog_keywords.replace("،",",").split(","):
            if k:
                k_title = k
                k_slug = slugify(k_title)
                keyword = Keyword.objects.get_or_create(language=blog_language, title=k_title,slug=k_slug)
                news.keywords.add(keyword)
    except Exception as e:
        log_func("check_blog_post", e)
        return None