from app.db.session import SessionLocal
from app.db.models import Tenant, User, Customer, Template, Integration, IntegrationSyncLog
from app.core.security import get_password_hash
from datetime import datetime, timedelta


def load_demo_data(force_reload: bool = False):
    """Load demo tenant, users, customers, and templates for quick start
    
    Args:
        force_reload: If True, delete existing demo data and reload
    """
    db = SessionLocal()
    
    try:
        # Check if demo already exists
        existing_tenant = db.query(Tenant).filter(Tenant.name == "Demo Company").first()
        if existing_tenant and not force_reload:
            # Check if customers exist
            existing_customers = db.query(Customer).filter(Customer.tenant_id == existing_tenant.id).count()
            existing_templates = db.query(Template).filter(Template.tenant_id == existing_tenant.id).count()
            print("Demo data already exists!")
            print(f"   Tenant ID: {existing_tenant.id}")
            print(f"   Customers: {existing_customers}")
            print(f"   Templates: {existing_templates}")
            print("   (Use force_reload=True to reload)")
            return
        
        # If force_reload, delete existing data
        if existing_tenant and force_reload:
            print("Force reloading demo data...")
            # Delete customers
            db.query(Customer).filter(Customer.tenant_id == existing_tenant.id).delete()
            # Delete templates
            db.query(Template).filter(Template.tenant_id == existing_tenant.id).delete()
            # Delete user
            db.query(User).filter(User.tenant_id == existing_tenant.id).delete()
            # Delete tenant
            db.query(Tenant).filter(Tenant.id == existing_tenant.id).delete()
            db.commit()
            print("Old demo data deleted.")
            # Create new tenant
            tenant = Tenant(name="Demo Company", status="active")
            db.add(tenant)
            db.flush()
        elif not existing_tenant:
        # Create demo tenant
        tenant = Tenant(name="Demo Company", status="active")
        db.add(tenant)
        db.flush()
        else:
            # Should not reach here, but just in case
            tenant = existing_tenant
        
        # Create demo user
        user = User(
            tenant_id=tenant.id,
            email="demo@example.com",
            password_hash=get_password_hash("demo123"),
            role="admin"
        )
        db.add(user)
        
        # Create demo customers
        customers_data = [
            {
                "email": "customer1@example.com",
                "phone": "+79991234567",
                "tg_chat_id": "123456789",
                "tags": ["vip", "active"],
                "meta": {"name": "Иван Иванов"}
            },
            {
                "email": "customer2@example.com",
                "phone": "+79997654321",
                "tags": ["active"],
                "meta": {"name": "Мария Петрова"}
            },
            {
                "email": "customer3@example.com",
                "tg_chat_id": "987654321",
                "tags": ["new"],
                "meta": {"name": "Алексей Сидоров"}
            }
        ]
        
        for data in customers_data:
            customer = Customer(tenant_id=tenant.id, **data)
            db.add(customer)
        
        # Create demo templates
        templates_data = [
            {
                "name": "Статус заказа",
                "slug": "order-status",
                "content": "Здравствуйте, {{customer_name}}! Ваш заказ №{{order_id}} готов к выдаче.",
                "variables": ["customer_name", "order_id"],
                "channel_strategy": {"primary": ["telegram", "email"], "failover": True}
            },
            {
                "name": "Напоминание о визите",
                "slug": "appointment-reminder",
                "content": "Напоминаем о вашем визите {{date}} в {{time}}. Ждём вас!",
                "variables": ["date", "time"],
                "channel_strategy": {"primary": ["telegram", "vk"], "failover": True}
            },
            {
                "name": "Промо акция",
                "slug": "promo-campaign",
                "content": "Только сегодня — скидка 15% на все услуги! Успейте воспользоваться.",
                "variables": [],
                "channel_strategy": {"primary": ["email"], "failover": False}
            }
        ]
        
        for data in templates_data:
            template = Template(tenant_id=tenant.id, **data)
            db.add(template)
        
        db.commit()
        
        print("✅ Demo data loaded successfully!")
        print(f"   Email: demo@example.com")
        print(f"   Password: demo123")
        print(f"   Tenant ID: {tenant.id}")
    
    finally:
        db.close()


if __name__ == "__main__":
    load_demo_data()




