"""
Создать 3 поста за вчера для одного канала
Быстрое решение без парсинга
"""

import random
from datetime import datetime, timedelta
from src.database.db import session_scope
from src.database.models import Source, Post, PostMetrics
from src.metrics.calculator import MetricsCalculator


# Контент постов о недвижимости
POSTS_CONTENT = [
    "Luxury penthouse in Manhattan! 3 bedrooms, 2500 sq ft, stunning city views. Price: $8.5M",
    "New development in Brooklyn! Modern apartments, rooftop pool, gym. Starting from $750K",
    "Investment opportunity! Multi-family property, 8 units, fully rented. Cap rate 7.2%",
    "Beachfront villa in Miami! 5 bedrooms, private pool, ocean access. $4.2M",
    "Commercial property in prime location! Office building, 10,000 sq ft. Great ROI!",
    "Cozy cottage in the suburbs! 2 bedrooms, large garden, quiet neighborhood. $450K",
]


def create_posts():
    """Создать 3 поста за вчера"""
    
    print("=" * 60)
    print("CREATE 3 POSTS FROM YESTERDAY")
    print("=" * 60)
    
    # Один канал
    channel = "zillow"
    platform = "instagram"
    followers = 1500000
    
    print(f"\nChannel: {platform}/@{channel}")
    print(f"Followers: {followers:,}")
    print(f"Creating 3 posts from yesterday...")
    print("-" * 60)
    
    # Вчера
    today = datetime.now().replace(hour=0, minute=0, second=0, microsecond=0)
    yesterday = today - timedelta(days=1)
    
    with session_scope() as session:
        # Получить или создать источник
        source = session.query(Source).filter_by(
            platform=platform,
            username=channel
        ).first()
        
        if not source:
            source = Source(
                platform=platform,
                username=channel,
                identifier=channel,
                subscriber_count=followers,
                followers_count=followers,
                is_active=1
            )
            session.add(source)
            session.flush()
            print(f"+ Created source: {platform}/@{channel}")
        else:
            print(f"= Source exists: {platform}/@{channel}")
        
        # Создать 3 поста
        created_count = 0
        
        for i in range(3):
            # Случайное время вчера (между 10:00 и 20:00)
            hours_offset = random.randint(10, 20)
            minutes_offset = random.randint(0, 59)
            post_time = yesterday + timedelta(hours=hours_offset, minutes=minutes_offset)
            
            # Уникальный ID
            external_id = f"post_yesterday_{channel}_{int(post_time.timestamp())}_{i}"
            
            # Проверить, не существует ли уже
            existing = session.query(Post).filter_by(
                source_id=source.id,
                external_id=external_id
            ).first()
            
            if existing:
                print(f"\n{i+1}. Post already exists")
                continue
            
            # Контент
            content = random.choice(POSTS_CONTENT)
            
            # Метрики (реалистичные для канала с 1.5M подписчиков)
            # Engagement rate 1-3%
            engagement_rate = random.uniform(0.01, 0.03)
            base_engagement = int(followers * engagement_rate)
            
            views = random.randint(base_engagement * 5, base_engagement * 15)
            likes = random.randint(int(base_engagement * 0.4), int(base_engagement * 0.7))
            comments = random.randint(int(likes * 0.05), int(likes * 0.12))
            shares = random.randint(int(likes * 0.02), int(likes * 0.08))
            
            # Создать пост
            post = Post(
                source_id=source.id,
                external_id=external_id,
                content=content,
                url=f"https://www.instagram.com/p/{external_id}/",
                views=views,
                reactions=0,
                likes=likes,
                comments=comments,
                shares=shares,
                created_at=post_time,
                parsed_at=datetime.now()
            )
            session.add(post)
            session.flush()
            
            print(f"\n{i+1}. + Post created:")
            print(f"   Content: {content[:60]}...")
            print(f"   Created: {post_time.strftime('%Y-%m-%d %H:%M')}")
            print(f"   Metrics: views={views:,}, likes={likes:,}, comments={comments:,}")
            
            # Рассчитать метрики
            try:
                metrics = MetricsCalculator.calculate_post_metrics(post, source)
                metrics.post_id = post.id
                session.add(metrics)
                session.flush()
                print(f"   Score: {metrics.normalized_score:.2f}, Engagement: {metrics.engagement_rate:.2%}")
            except Exception as e:
                print(f"   ! Error calculating metrics: {e}")
                # Создать пустые метрики
                empty_metrics = PostMetrics(
                    post_id=post.id,
                    engagement_rate=0.0,
                    normalized_score=0.0,
                    subscriber_ratio=0.0,
                    total_engagement=0,
                    calculated_at=datetime.now()
                )
                session.add(empty_metrics)
            
            created_count += 1
    
    print("\n" + "=" * 60)
    print(f"SUCCESS! Created {created_count} posts from yesterday")
    print("=" * 60)
    print("\nNext steps:")
    print("  1. Check: python show_top_posts.py")
    print("  2. In Telegram bot: /top_yesterday")
    print("=" * 60)


if __name__ == "__main__":
    create_posts()
