use anyhow::Result;
use marketing_engine::{CampaignBuilder, Content, MarketingRepository};
use tracing::{info, Level};
use tracing_subscriber;

#[tokio::main]
async fn main() -> Result<()> {
    // Инициализация логирования
    tracing_subscriber::fmt()
        .with_target(true)
        .with_thread_ids(true)
        .with_file(true)
        .with_line_number(true)
        .with_max_level(Level::DEBUG)
        .init();
    
    info!("🚀 Маркетинговый движок запущен");
    
    // Читаем URL базы данных из переменной окружения
    let database_url = std::env::var("DATABASE_URL")
        .unwrap_or_else(|_| "postgres://localhost/marketing".to_string());
    
    // Создаем репозиторий
    let repo = MarketingRepository::new(&database_url).await?;
    info!("✅ Подключено к базе данных");
    
    // Создаем кампанию
    let campaign = CampaignBuilder::new()
        .title("Весенняя лидогенерация 2026")
        .budget(5000.0)
        .fluxion_target(0.75)
        .build()?;
    
    // Сохраняем в БД
    repo.create_campaign(&campaign).await?;
    info!("✅ Кампания сохранена: {}", campaign.title);
    
    // Работаем с контентом
    let content = Content::new(campaign.id, "Мастер-класс по Rust-маркетингу")
        .validate(0.85)?
        .publish("https://rust.com/masterclass")?;
    
    // Сохраняем контент
    repo.save_content(&content).await?;
    info!("✅ Контент сохранен с ROI: {:.2}%", content.get_roi());
    
    // Показываем статистику
    let contents = repo.get_campaign_contents(campaign.id).await?;
    
    println!("\n📊 АНАЛИТИКА КАМПАНИИ:");
    println!("   Название: {}", campaign.title);
    println!("   Всего контента: {}", contents.len());
    
    let total_leads: i32 = contents.iter()
        .filter_map(|c| c.leads_generated)
        .sum();
    
    println!("   Всего лидов: {}", total_leads);
    println!("\n📦 Сохраненный контент:");
    for content in contents {
        println!("   - {} (ROI: {:.2}%)", content.title, content.get_roi());
    }
    
    Ok(())
}
