from django.core.mail import send_mail
from django.template.loader import render_to_string
from django.conf import settings
import logging

logger = logging.getLogger(__name__)


def send_job_posting_email(jobs, hiring_type):
    """
    Send email notification about new job posting(s).
    
    Args:
        jobs: Single Job object or list of Job objects
        hiring_type: 'single' or 'multiple'
    """
    # Ensure jobs is a list
    if not isinstance(jobs, list):
        jobs = [jobs]
    
    if not jobs:
        return
    
    # Get company email and admin email
    company_email = jobs[0].workEmail
    admin_email = settings.ADMIN_EMAIL
    
    logger.info(f"Preparing to send job posting email. Hiring type: {hiring_type}, Company email: {company_email}, Admin email: {admin_email}")
    
    # Prepare email content
    if hiring_type == 'single':
        subject = f"New Job Posting: {jobs[0].title}"
        email_content = prepare_single_job_email(jobs[0])
        recipients = [company_email, admin_email]
    else:
        subject = f"New Multiple Job Postings from {jobs[0].CompanyName}"
        email_content = prepare_multiple_jobs_email(jobs)
        recipients = [company_email, admin_email]
    
    # Send email
    try:
        logger.info(f"Sending email with subject: {subject} to recipients: {recipients}")
        send_mail(
            subject=subject,
            message=email_content['plain_text'],
            from_email=settings.DEFAULT_FROM_EMAIL,  # noreply@stafflyn.com - no-reply emails
            recipient_list=recipients,
            html_message=email_content['html'],
            fail_silently=False,
        )
        logger.info(f"Email sent successfully for job posting: {jobs[0].title}")
    except Exception as e:
        logger.error(f"Error sending job posting email: {str(e)}", exc_info=True)


def prepare_single_job_email(job):
    """Prepare single job posting email content"""
    
    plain_text = f"""
Hello,

A new job posting has been created on Stafflyn.

Job Details:
- Title: {job.title}
- Company: {job.CompanyName}
- Country: {job.CompanyCountry}
- Seniority Level: {job.seniority}
- Monthly Budget: {job.monthlyBudget}
- Start Date: {job.startDate}
- Required Skills/Tags: {', '.join(job.Tags) if job.Tags else 'Not specified'}
- Requirements: {job.requirements}
- Status: {'Active' if job.status else 'Inactive'}

Best regards,
Stafflyn Team
"""

    html = f"""
    <html>
        <body style="font-family: Arial, sans-serif; line-height: 1.6;">
            <h2>New Job Posting on Stafflyn</h2>
            <p>Hello,</p>
            <p>A new job posting has been created on Stafflyn.</p>
            
            <h3>Job Details:</h3>
            <table style="border-collapse: collapse; width: 100%; max-width: 600px;">
                <tr style="background-color: #f2f2f2;">
                    <td style="padding: 10px; border: 1px solid #ddd;"><strong>Title</strong></td>
                    <td style="padding: 10px; border: 1px solid #ddd;">{job.title}</td>
                </tr>
                <tr>
                    <td style="padding: 10px; border: 1px solid #ddd;"><strong>Company</strong></td>
                    <td style="padding: 10px; border: 1px solid #ddd;">{job.CompanyName}</td>
                </tr>
                <tr style="background-color: #f2f2f2;">
                    <td style="padding: 10px; border: 1px solid #ddd;"><strong>Country</strong></td>
                    <td style="padding: 10px; border: 1px solid #ddd;">{job.CompanyCountry}</td>
                </tr>
                <tr>
                    <td style="padding: 10px; border: 1px solid #ddd;"><strong>Seniority Level</strong></td>
                    <td style="padding: 10px; border: 1px solid #ddd;">{job.seniority}</td>
                </tr>
                <tr style="background-color: #f2f2f2;">
                    <td style="padding: 10px; border: 1px solid #ddd;"><strong>Monthly Budget</strong></td>
                    <td style="padding: 10px; border: 1px solid #ddd;">{job.monthlyBudget}</td>
                </tr>
                <tr>
                    <td style="padding: 10px; border: 1px solid #ddd;"><strong>Start Date</strong></td>
                    <td style="padding: 10px; border: 1px solid #ddd;">{job.startDate}</td>
                </tr>
                <tr style="background-color: #f2f2f2;">
                    <td style="padding: 10px; border: 1px solid #ddd;"><strong>Required Skills/Tags</strong></td>
                    <td style="padding: 10px; border: 1px solid #ddd;">{', '.join(job.Tags) if job.Tags else 'Not specified'}</td>
                </tr>
                <tr>
                    <td style="padding: 10px; border: 1px solid #ddd;"><strong>Requirements</strong></td>
                    <td style="padding: 10px; border: 1px solid #ddd;">{job.requirements}</td>
                </tr>
                <tr style="background-color: #f2f2f2;">
                    <td style="padding: 10px; border: 1px solid #ddd;"><strong>Status</strong></td>
                    <td style="padding: 10px; border: 1px solid #ddd;">{'Active' if job.status else 'Inactive'}</td>
                </tr>
            </table>
            
            <p style="margin-top: 20px;">
                <em>Best regards,<br>
                Stafflyn Team</em>
            </p>
        </body>
    </html>
    """
    
    return {
        'plain_text': plain_text,
        'html': html
    }


def prepare_multiple_jobs_email(jobs):
    """Prepare multiple job postings email content"""
    
    company_name = jobs[0].CompanyName
    
    # Build plain text version
    plain_text = f"""
Hello,

A new job posting with multiple positions has been created on Stafflyn.

Company: {company_name}
Country: {jobs[0].CompanyCountry}
Total Positions: {len(jobs)}

Position Details:
"""
    
    for idx, job in enumerate(jobs, 1):
        plain_text += f"""
Position {idx}:
- Title: {job.title}
- Seniority Level: {job.seniority}
- Monthly Budget: {job.monthlyBudget}
- Required Skills/Tags: {', '.join(job.Tags) if job.Tags else 'Not specified'}
"""
    
    plain_text += f"""
Common Details:
- Start Date: {jobs[0].startDate}
- Requirements: {jobs[0].requirements}
- Status: {'Active' if jobs[0].status else 'Inactive'}

Best regards,
Stafflyn Team
"""
    
    # Build HTML version
    html = f"""
    <html>
        <body style="font-family: Arial, sans-serif; line-height: 1.6;">
            <h2>New Multiple Job Postings on Stafflyn</h2>
            <p>Hello,</p>
            <p>A new job posting with multiple positions has been created on Stafflyn.</p>
            
            <h3>Summary:</h3>
            <table style="border-collapse: collapse; width: 100%; max-width: 600px; margin-bottom: 20px;">
                <tr style="background-color: #f2f2f2;">
                    <td style="padding: 10px; border: 1px solid #ddd;"><strong>Company</strong></td>
                    <td style="padding: 10px; border: 1px solid #ddd;">{company_name}</td>
                </tr>
                <tr>
                    <td style="padding: 10px; border: 1px solid #ddd;"><strong>Country</strong></td>
                    <td style="padding: 10px; border: 1px solid #ddd;">{jobs[0].CompanyCountry}</td>
                </tr>
                <tr style="background-color: #f2f2f2;">
                    <td style="padding: 10px; border: 1px solid #ddd;"><strong>Total Positions</strong></td>
                    <td style="padding: 10px; border: 1px solid #ddd;">{len(jobs)}</td>
                </tr>
            </table>
            
            <h3>Position Details:</h3>
"""
    
    for idx, job in enumerate(jobs, 1):
        html += f"""
            <h4>Position {idx}: {job.title}</h4>
            <table style="border-collapse: collapse; width: 100%; max-width: 600px; margin-bottom: 15px;">
                <tr style="background-color: #f2f2f2;">
                    <td style="padding: 10px; border: 1px solid #ddd;"><strong>Title</strong></td>
                    <td style="padding: 10px; border: 1px solid #ddd;">{job.title}</td>
                </tr>
                <tr>
                    <td style="padding: 10px; border: 1px solid #ddd;"><strong>Seniority Level</strong></td>
                    <td style="padding: 10px; border: 1px solid #ddd;">{job.seniority}</td>
                </tr>
                <tr style="background-color: #f2f2f2;">
                    <td style="padding: 10px; border: 1px solid #ddd;"><strong>Monthly Budget</strong></td>
                    <td style="padding: 10px; border: 1px solid #ddd;">{job.monthlyBudget}</td>
                </tr>
                <tr>
                    <td style="padding: 10px; border: 1px solid #ddd;"><strong>Required Skills/Tags</strong></td>
                    <td style="padding: 10px; border: 1px solid #ddd;">{', '.join(job.Tags) if job.Tags else 'Not specified'}</td>
                </tr>
            </table>
"""
    
    html += f"""
            <h3>Common Details:</h3>
            <table style="border-collapse: collapse; width: 100%; max-width: 600px;">
                <tr style="background-color: #f2f2f2;">
                    <td style="padding: 10px; border: 1px solid #ddd;"><strong>Start Date</strong></td>
                    <td style="padding: 10px; border: 1px solid #ddd;">{jobs[0].startDate}</td>
                </tr>
                <tr>
                    <td style="padding: 10px; border: 1px solid #ddd;"><strong>Requirements</strong></td>
                    <td style="padding: 10px; border: 1px solid #ddd;">{jobs[0].requirements}</td>
                </tr>
                <tr style="background-color: #f2f2f2;">
                    <td style="padding: 10px; border: 1px solid #ddd;"><strong>Status</strong></td>
                    <td style="padding: 10px; border: 1px solid #ddd;">{'Active' if jobs[0].status else 'Inactive'}</td>
                </tr>
            </table>
            
            <p style="margin-top: 20px;">
                <em>Best regards,<br>
                Stafflyn Team</em>
            </p>
        </body>
    </html>
    """
    
    return {
        'plain_text': plain_text,
        'html': html
    }
