"""Pytest configuration and fixtures."""
import pytest
from datetime import datetime
from src.email_providers.base import Email, Attachment
from src.utils.config import load_config, load_categories


@pytest.fixture
def config():
    """Load test configuration."""
    return load_config()


@pytest.fixture
def categories():
    """Load test categories."""
    return load_categories()


@pytest.fixture
def sample_email():
    """Create a sample email for testing."""
    return Email(
        id='test-1',
        subject='Meeting at 3pm today',
        sender='john@company.com',
        sender_name='John Doe',
        date=datetime.now(),
        body='Let\'s discuss the Q4 project. Attached is the proposal.',
        body_snippet='Let\'s discuss the Q4 project.',
        has_attachments=True,
        attachments=[
            Attachment(
                filename='proposal.pdf',
                mime_type='application/pdf',
                size=102400
            )
        ],
        headers={'Subject': 'Meeting at 3pm today'},
        labels=[],
        is_read=False,
        provider='gmail'
    )


@pytest.fixture
def sample_emails():
    """Create multiple sample emails."""
    emails = []

    # Auth email
    emails.append(Email(
        id='auth-1',
        subject='Verify your account',
        sender='noreply@bank.com',
        body='Your verification code is 123456',
        body_snippet='Your verification code is 123456',
        date=datetime.now(),
        provider='gmail'
    ))

    # Invoice email
    emails.append(Email(
        id='invoice-1',
        subject='Invoice #INV-2024-001',
        sender='billing@vendor.com',
        body='Please find attached invoice for October services.',
        body_snippet='Please find attached invoice',
        has_attachments=True,
        attachments=[
            Attachment('invoice.pdf', 'application/pdf', 50000)
        ],
        date=datetime.now(),
        provider='gmail'
    ))

    # Newsletter
    emails.append(Email(
        id='newsletter-1',
        subject='Weekly Digest - Oct 21',
        sender='newsletter@blog.com',
        body='This week in tech... Click here to read more.',
        body_snippet='This week in tech',
        date=datetime.now(),
        provider='gmail'
    ))

    # Work email
    emails.append(Email(
        id='work-1',
        subject='Project deadline extended',
        sender='manager@company.com',
        sender_name='Jane Manager',
        body='Team, the Q4 project deadline has been extended to Nov 15.',
        body_snippet='Project deadline has been extended',
        date=datetime.now(),
        provider='gmail'
    ))

    # Personal email
    emails.append(Email(
        id='personal-1',
        subject='Dinner this weekend?',
        sender='friend@gmail.com',
        sender_name='Alex',
        body='Hey! Want to grab dinner this weekend?',
        body_snippet='Want to grab dinner',
        date=datetime.now(),
        provider='gmail'
    ))

    return emails
