import os
import json
from datetime import datetime
from dotenv import load_dotenv
from notion_client import Client

# Load environment variables
load_dotenv()

# Initialize Notion client
client = Client(auth=os.getenv('NOTION_TOKEN'))

def format_property_value(prop_name: str, prop_data: dict) -> str:
    """Format a property value for display"""
    prop_type = prop_data.get('type')
    
    if prop_type == 'title':
        if prop_data.get('title') and len(prop_data['title']) > 0:
            return prop_data['title'][0].get('plain_text', 'Empty')
        return 'Empty'
    
    elif prop_type == 'rich_text':
        if prop_data.get('rich_text') and len(prop_data['rich_text']) > 0:
            return prop_data['rich_text'][0].get('plain_text', 'Empty')
        return 'Empty'
    
    elif prop_type == 'number':
        return str(prop_data.get('number', 'Empty'))
    
    elif prop_type == 'select':
        select_data = prop_data.get('select')
        if select_data:
            return f"{select_data.get('name', 'Empty')} ({select_data.get('color', 'no color')})"
        return 'Empty'
    
    elif prop_type == 'multi_select':
        multi_select = prop_data.get('multi_select', [])
        if multi_select:
            items = [f"{item.get('name', 'Empty')} ({item.get('color', 'no color')})" for item in multi_select]
            return ', '.join(items)
        return 'Empty'
    
    elif prop_type == 'date':
        date_data = prop_data.get('date')
        if date_data:
            start = date_data.get('start', 'No start date')
            end = date_data.get('end')
            if end:
                return f"{start} to {end}"
            return start
        return 'Empty'
    
    elif prop_type == 'people':
        people = prop_data.get('people', [])
        if people:
            names = [person.get('name', 'Unknown') for person in people]
            return ', '.join(names)
        return 'Empty'
    
    elif prop_type == 'files':
        files = prop_data.get('files', [])
        if files:
            file_names = []
            for file in files:
                if file.get('type') == 'file':
                    file_names.append(file.get('name', 'Unnamed file'))
                elif file.get('type') == 'external':
                    file_names.append(file.get('name', 'External file'))
            return ', '.join(file_names) if file_names else 'Empty'
        return 'Empty'
    
    elif prop_type == 'checkbox':
        return str(prop_data.get('checkbox', False))
    
    elif prop_type == 'url':
        return prop_data.get('url', 'Empty')
    
    elif prop_type == 'email':
        return prop_data.get('email', 'Empty')
    
    elif prop_type == 'phone_number':
        return prop_data.get('phone_number', 'Empty')
    
    elif prop_type == 'formula':
        formula_result = prop_data.get('formula', {})
        formula_type = formula_result.get('type')
        if formula_type == 'string':
            return formula_result.get('string', 'Empty')
        elif formula_type == 'number':
            return str(formula_result.get('number', 'Empty'))
        elif formula_type == 'boolean':
            return str(formula_result.get('boolean', 'Empty'))
        elif formula_type == 'date':
            date_data = formula_result.get('date')
            if date_data:
                return date_data.get('start', 'Empty')
            return 'Empty'
        return 'Empty'
    
    elif prop_type == 'relation':
        relations = prop_data.get('relation', [])
        if relations:
            return f"{len(relations)} related item(s)"
        return 'Empty'
    
    elif prop_type == 'rollup':
        rollup_data = prop_data.get('rollup', {})
        rollup_type = rollup_data.get('type')
        if rollup_type == 'array':
            array_data = rollup_data.get('array', [])
            return f"Array with {len(array_data)} item(s)"
        elif rollup_type == 'number':
            return str(rollup_data.get('number', 'Empty'))
        return 'Empty'
    
    elif prop_type == 'created_time':
        return prop_data.get('created_time', 'Empty')
    
    elif prop_type == 'created_by':
        created_by = prop_data.get('created_by')
        if created_by:
            return created_by.get('name', 'Unknown')
        return 'Empty'
    
    elif prop_type == 'last_edited_time':
        return prop_data.get('last_edited_time', 'Empty')
    
    elif prop_type == 'last_edited_by':
        edited_by = prop_data.get('last_edited_by')
        if edited_by:
            return edited_by.get('name', 'Unknown')
        return 'Empty'
    
    elif prop_type == 'status':
        status_data = prop_data.get('status')
        if status_data:
            return f"{status_data.get('name', 'Empty')} ({status_data.get('color', 'no color')})"
        return 'Empty'
    
    else:
        return f'Unsupported type: {prop_type}'

def analyze_page_properties(page_id: str):
    """Analyze and display all properties of a Notion page"""
    try:
        page = client.pages.retrieve(page_id)
        
        print("=" * 100)
        print("NOTION PAGE PROPERTIES ANALYSIS")
        print("=" * 100)
        
        # Basic page info
        print(f"\n📄 PAGE INFO:")
        print(f"   Page ID: {page.get('id')}")
        print(f"   Created: {page.get('created_time')}")
        print(f"   Last Edited: {page.get('last_edited_time')}")
        print(f"   URL: {page.get('url')}")
        
        # Icon and cover
        icon = page.get('icon')
        if icon:
            if icon.get('type') == 'emoji':
                print(f"   Icon: {icon.get('emoji')} (emoji)")
            elif icon.get('type') == 'external':
                print(f"   Icon: {icon.get('external', {}).get('url')} (external)")
            elif icon.get('type') == 'file':
                print(f"   Icon: {icon.get('file', {}).get('url')} (file)")
        
        cover = page.get('cover')
        if cover:
            if cover.get('type') == 'external':
                print(f"   Cover: {cover.get('external', {}).get('url')} (external)")
            elif cover.get('type') == 'file':
                print(f"   Cover: {cover.get('file', {}).get('url')} (file)")
        
        # Properties
        properties = page.get('properties', {})
        
        print(f"\n📊 PROPERTIES SUMMARY:")
        print(f"   Total properties: {len(properties)}")
        
        print(f"\n📝 DETAILED PROPERTIES:")
        print("-" * 100)
        
        # Group properties by type for better organization
        property_types = {}
        for prop_name, prop_data in properties.items():
            prop_type = prop_data.get('type', 'unknown')
            if prop_type not in property_types:
                property_types[prop_type] = []
            property_types[prop_type].append((prop_name, prop_data))
        
        for prop_type, props in sorted(property_types.items()):
            print(f"\n🏷️  {prop_type.upper()} PROPERTIES:")
            for prop_name, prop_data in props:
                value = format_property_value(prop_name, prop_data)
                print(f"   • {prop_name}: {value}")
        
        print("\n" + "=" * 100)
        print("MARKDOWN INTEGRATION SUGGESTIONS:")
        print("=" * 100)
        
        # Suggest useful properties for markdown integration
        useful_props = []
        
        for prop_name, prop_data in properties.items():
            prop_type = prop_data.get('type')
            value = format_property_value(prop_name, prop_data)
            
            # Skip empty values and title (already used as H1)
            if value != 'Empty' and prop_type != 'title':
                if prop_type in ['date', 'select', 'multi_select', 'people', 'status', 'created_time', 'last_edited_time', 'created_by', 'last_edited_by']:
                    useful_props.append({
                        'name': prop_name,
                        'type': prop_type,
                        'value': value
                    })
        
        if useful_props:
            print(f"\n💡 SUGGESTED PROPERTIES TO INCLUDE IN MARKDOWN:")
            for prop in useful_props:
                print(f"   • **{prop['name']}**: {prop['value']} (type: {prop['type']})")
                
            print(f"\n📋 EXAMPLE MARKDOWN HEADER:")
            print(f"   # Data Retention")
            print(f"   ")
            for prop in useful_props[:5]:  # Show first 5 as example
                print(f"   **{prop['name']}**: {prop['value']}")
            if len(useful_props) > 5:
                print(f"   ... (and {len(useful_props) - 5} more)")
            print(f"   ")
            print(f"   [Original content starts here...]")
        else:
            print(f"\n💡 No additional properties with useful values found for markdown integration.")
            
        print("\n" + "=" * 100)
        
    except Exception as e:
        print(f"❌ Error analyzing page: {str(e)}")

if __name__ == '__main__':
    page_id = '2725bd136a8480a69301d6e70171cdad'
    analyze_page_properties(page_id)
