from markupsafe import Markup
import json
import os
from odoo import http
from odoo.http import request

# Helper to load blogs from JSON
def get_blogs():
    json_path = os.path.join(os.path.dirname(__file__), '../data/blogs.json')
    if os.path.exists(json_path):
        with open(json_path, 'r', encoding='utf-8-sig') as f:
            blogs = json.load(f)
            # Reversing so the last added blog appears first
            return blogs[::-1] if isinstance(blogs, list) else blogs
    return []

class ContactController(http.Controller):
    @http.route('/contactus/submit', type='http', auth="public", website=True, csrf=True)
    def contact_submit(self, **post):
        import logging
        _logger = logging.getLogger(__name__)
        
        name = post.get('name')
        email = post.get('email_from')
        phone = post.get('phone')
        subject = post.get('subject')
        message = post.get('description')

        # Format the email content
        email_content = f"""
            <div style="font-family: Arial, sans-serif; padding: 20px; border: 1px solid #ddd; border-radius: 8px;">
                <h2 style="color: #2BB1A5; border-bottom: 2px solid #FECD4F; padding-bottom: 10px;">New Contact Form Submission</h2>
                <table style="width: 100%; border-collapse: collapse; margin-top: 15px;">
                    <tr>
                        <td style="padding: 8px; font-weight: bold; width: 30%;">Full Name:</td>
                        <td style="padding: 8px;">{name}</td>
                    </tr>
                    <tr>
                        <td style="padding: 8px; font-weight: bold;">Email:</td>
                        <td style="padding: 8px;">{email}</td>
                    </tr>
                    <tr>
                        <td style="padding: 8px; font-weight: bold;">Phone:</td>
                        <td style="padding: 8px;">{phone}</td>
                    </tr>
                    <tr>
                        <td style="padding: 8px; font-weight: bold;">Subject:</td>
                        <td style="padding: 8px;">{subject}</td>
                    </tr>
                </table>
                <div style="margin-top: 20px; padding: 15px; background-color: #F8F9FA; border-left: 4px solid #2BB1A5;">
                    <strong style="display: block; margin-bottom: 10px;">Message:</strong>
                    <div style="white-space: pre-wrap;">{message}</div>
                </div>
            </div>
        """

        company_email = request.env['res.company'].sudo().search([], limit=1).email or 'noreply@chennora.com'

        mail_values = {
            'subject': f"Contact Form: {subject or 'Inquiry'} from {name}",
            'body_html': email_content,
            'email_to': 'alaguraj0361@gmail.com',
            'email_from': company_email,
            'reply_to': email,
        }
        
        # Create and send the mail
        try:
            mail = request.env['mail.mail'].sudo().create(mail_values)
            mail.send()
            _logger.info("Contact form email sent successfully to %s", mail_values['email_to'])
        except Exception as e:
            _logger.error("Failed to send contact form email: %s", str(e))

        return request.render('dine360_theme_chennora.contact_thank_you')

class BlogController(http.Controller):
    @http.route(['/blog', '/blog/page/<int:page>'], type='http', auth='public', website=True)
    def blog_list(self, page=1, **post):
        all_blogs = get_blogs()
        
        # Pagination Settings
        per_page = 12
        total = len(all_blogs)
        
        # Odoo's built-in pager
        pager = request.website.pager(
            url='/blog',
            total=total,
            page=page,
            step=per_page,
            scope=5,
            url_args=post,
        )
        
        # Extract blogs for current page
        start = (page - 1) * per_page
        end = start + per_page
        blogs_paged = all_blogs[start:end]

        return request.render('dine360_theme_chennora.blog_page', {
            'blog_posts': blogs_paged,
            'pager': pager,
        })

    @http.route(['/blog/<string:slug>'], type='http', auth='public', website=True)
    def blog_detail(self, slug, **post):
        all_blogs = get_blogs()
        blog_post = next((b for b in all_blogs if b['slug'] == slug), None)
        
        if not blog_post:
            return request.not_found()
            
        recent_posts = [b for b in all_blogs if b['slug'] != slug][:3]
        
        # Get categories and counts
        categories = {}
        for b in all_blogs:
            cat = b.get('category', 'Restaurant')
            categories[cat] = categories.get(cat, 0) + 1
        
        return request.render('dine360_theme_chennora.blog_detail_layout', {
            'blog_title': blog_post.get('title'),
            'blog_img': blog_post.get('image'),
            'blog_date': blog_post.get('date'),
            'blog_category': blog_post.get('category'),
            'blog_content': Markup(blog_post.get('content') or ''),
            'recent_posts': recent_posts,
            'categories': categories,
        })

