from rest_framework import serializers
from .models import CrawledDevelopment, CrawledFlat, CrawledAttachment, SyncLog, CrawlerSource

class CrawlerSourceSerializer(serializers.ModelSerializer):
    class Meta:
        model = CrawlerSource
        fields = ['id', 'name', 'url', 'is_active', 'last_crawled_at']

class CrawledAttachmentSerializer(serializers.ModelSerializer):
    file_type_display = serializers.CharField(source='get_file_type_display', read_only=True)
    category_display = serializers.CharField(source='get_category_display', read_only=True)
    
    class Meta:
        model = CrawledAttachment
        fields = [
            'id', 'development', 'external_id', 'file_url', 'file_type', 'file_type_display',
            'category', 'category_display', 'title', 'is_synced', 'last_sync_at',
            'created_at', 'updated_at'
        ]

class CrawledFlatSerializer(serializers.ModelSerializer):
    sync_status_display = serializers.CharField(source='get_sync_status_display', read_only=True)
    
    class Meta:
        model = CrawledFlat
        fields = [
            'id', 'development', 'external_id', 'bedrooms_num', 'bathrooms_num',
            'area', 'base_price', 'price_per_meter', 'is_sold_out', 'raw_data',
            'is_synced', 'last_sync_at', 'sync_status', 'sync_status_display',
            'created_at', 'updated_at'
        ]

class CrawledDevelopmentSerializer(serializers.ModelSerializer):
    source_name = serializers.CharField(source='source.name', read_only=True)
    sync_status_display = serializers.CharField(source='get_sync_status_display', read_only=True)
    flats = CrawledFlatSerializer(many=True, read_only=True)
    attachments = CrawledAttachmentSerializer(many=True, read_only=True)
    
    class Meta:
        model = CrawledDevelopment
        fields = [
            'id', 'source', 'source_name', 'external_id', 'reference_id', 'title', 
            'slug', 'address', 'base_price', 'latitude', 'longitude', 'country_code', 
            'city_name', 'is_active', 'is_sold_out', 'completed_status', 'completed_date',
            'is_synced', 'last_sync_at', 'sync_status', 'sync_status_display', 
            'sync_message', 'raw_data', 'created_at', 'updated_at', 'flats', 'attachments'
        ]

class SyncLogSerializer(serializers.ModelSerializer):
    sync_type_display = serializers.CharField(source='get_sync_type_display', read_only=True)
    status_display = serializers.CharField(source='get_status_display', read_only=True)
    development_title = serializers.CharField(source='development.title', read_only=True)
    
    class Meta:
        model = SyncLog
        fields = [
            'id', 'development', 'development_title', 'flat', 'attachment',
            'sync_type', 'sync_type_display', 'status', 'status_display',
            'message', 'response_data', 'created_at'
        ]