#!/usr/bin/env python3
"""
Model Comparison Simulator
==========================
Simulates conversations with different Gemini models for comparison.

Usage:
    python scripts/simulate_model_comparison.py

Author: NordaBiz Team
Created: 2026-01-29
"""

import os
import sys
import json
from datetime import datetime

# Add parent directory to path for imports
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

from dotenv import load_dotenv
load_dotenv()

from database import SessionLocal, AIChatConversation, AIChatMessage, User
from nordabiz_chat import NordaBizChatEngine

# Questions to compare (from Artur's and Maciej's conversations)
COMPARISON_QUESTIONS = {
    'artur': {
        'user_id': 3,
        'user_name': 'Artur Wiertel',
        'original_conversation_id': 63,
        'questions': [
            {
                'id': 1,
                'question': 'ilu członków ma izba norda?',
                'type': 'simple',
                'original_answer': 'Izba Norda Biznes zrzesza obecnie 111 firm.'
            },
            {
                'id': 2,
                'question': 'czy w izbie są osoby gotowe do współpracy przy wspólnych projektach inwestycyjnych?',
                'type': 'complex',
                'original_answer': 'W Norda Biznes posiadamy firmy otwarte na współpracę przy projektach inwestycyjnych. Szczególnie interesujące mogą być podmioty z kategorii Budownictwo, Nieruchomości oraz Usługi Biznesowe. Czy szukasz konkretnego rodzaju partnera lub projektu?'
            },
            {
                'id': 3,
                'question': 'Mam pomysł i projekt ciekawego przedsięwzięcia inwestycyjnego - budowa nieruchomości komercyjnej. Szukam partnerów - 3 osoby, wkład na poziomie 1,5 mln netto',
                'type': 'business',
                'original_answer': 'Poszukujesz partnerów do inwestycji w nieruchomość komercyjną. W naszej bazie znajdują się firmy, które mogą być zainteresowane takim przedsięwzięciem. Warto zwrócić uwagę na: ARD Invest, Progress Optima...'
            },
            {
                'id': 4,
                'question': 'a co sądzisz o firmie sigma?',
                'type': 'company',
                'original_answer': 'Firma Sigma Budownictwo to generalny wykonawca robót budowlanych, który ma na swoim koncie portfolio ponad 250 tys. m² powierzchni użytkowej, w tym hale przemysłowe. Jest to rodzinna firma z Wejherowa, zarządzana przez Romana i Tomasza Wiercińskich.'
            },
            {
                'id': 5,
                'question': 'co myślisz o pomysłach Jacka Pomieczyńskiego na forum?',
                'type': 'analysis',
                'original_answer': 'Chętnie pomogę! Aby odpowiedzieć na Twoje pytanie o pomysły Jacka Pomieczyńskiego, potrzebuję więcej informacji. Czy możesz sprecyzować, o jakie konkretnie pomysły chodzi?'
            }
        ]
    },
    'maciej': {
        'user_id': 1,
        'user_name': 'Maciej Pienczyn',
        'original_conversation_id': 62,
        'questions': [
            {
                'id': 1,
                'question': 'Kto jest prezesem PIXLAB?',
                'type': 'simple',
                'original_answer': 'Prezesem firmy Pixlab Softwarehouse jest Michał Bogdan Roszman.'
            },
            {
                'id': 2,
                'question': 'jakie znasz inne firmy IT w Norda?',
                'type': 'listing',
                'original_answer': 'W Norda Biznes działa kilka firm z branży IT i Telekomunikacja. Są to między innymi VENCODE, oferujące dedykowane aplikacje oparte na sztucznej inteligencji i technologii blockchain, oraz Delkom, specjalizujący się w usługach IT, cyberbezpieczeństwie i doradztwie informatycznym.'
            },
            {
                'id': 3,
                'question': 'podaj osoby kontaktowe - będę budował sieć komputerową',
                'type': 'contact',
                'original_answer': 'Wśród firm z branży IT i telekomunikacja, które mogą pomóc w budowie sieci komputerowej, znajdują się: Chopin Telewizja Kablowa: Operator telekomunikacyjny...'
            }
        ]
    }
}


def run_simulation():
    """Run model comparison simulation."""
    print("=" * 60)
    print("MODEL COMPARISON SIMULATION")
    print(f"New model: gemini-3-flash-preview")
    print(f"Date: {datetime.now().strftime('%Y-%m-%d %H:%M')}")
    print("=" * 60)

    # Initialize chat engine (uses new model from app config)
    try:
        chat_engine = NordaBizChatEngine()
        print(f"✓ Chat engine initialized with model: {chat_engine.gemini_service.model_name}")
    except Exception as e:
        print(f"✗ Failed to initialize chat engine: {e}")
        return None

    results = {}

    for user_key, user_data in COMPARISON_QUESTIONS.items():
        print(f"\n--- {user_data['user_name']} ---")
        results[user_key] = {
            'user_id': user_data['user_id'],
            'user_name': user_data['user_name'],
            'original_conversation_id': user_data['original_conversation_id'],
            'comparisons': []
        }

        for q in user_data['questions']:
            print(f"\nQ{q['id']}: {q['question'][:50]}...")

            try:
                # Get response from new model
                response = chat_engine.chat(
                    user_message=q['question'],
                    user_id=user_data['user_id'],
                    conversation_id=None,  # New conversation context
                    save_to_db=False  # Don't save simulation
                )

                new_answer = response.get('response', 'Brak odpowiedzi')
                print(f"   ✓ Got response ({len(new_answer)} chars)")

            except Exception as e:
                new_answer = f"Error: {str(e)}"
                print(f"   ✗ Error: {e}")

            results[user_key]['comparisons'].append({
                'question_id': q['id'],
                'question': q['question'],
                'type': q['type'],
                'old_model': 'gemini-2.5-flash-lite',
                'old_answer': q['original_answer'],
                'new_model': 'gemini-3-flash-preview',
                'new_answer': new_answer
            })

    # Save results to JSON
    output_file = os.path.join(
        os.path.dirname(os.path.dirname(os.path.abspath(__file__))),
        'data',
        'model_comparison_results.json'
    )

    os.makedirs(os.path.dirname(output_file), exist_ok=True)

    with open(output_file, 'w', encoding='utf-8') as f:
        json.dump({
            'generated_at': datetime.now().isoformat(),
            'old_model': 'gemini-2.5-flash-lite',
            'new_model': 'gemini-3-flash-preview',
            'results': results
        }, f, ensure_ascii=False, indent=2)

    print(f"\n✓ Results saved to: {output_file}")
    return results


if __name__ == '__main__':
    run_simulation()
