""" Core API serializers. """ from rest_framework import serializers from ..models import Tenant, AuditLogEntry, SystemConfiguration, SystemNotification, IntegrationLog class TenantSerializer(serializers.ModelSerializer): """ Tenant serializer. """ user_count = serializers.ReadOnlyField(source='get_user_count') patient_count = serializers.ReadOnlyField(source='get_patient_count') is_trial_expired = serializers.ReadOnlyField() class Meta: model = Tenant fields = [ 'tenant_id', 'name', 'display_name', 'description', 'organization_type', 'address_line1', 'address_line2', 'city', 'state', 'postal_code', 'country', 'phone_number', 'email', 'website', 'license_number', 'accreditation_body', 'accreditation_number', 'accreditation_expiry', 'timezone', 'locale', 'currency', 'subscription_plan', 'max_users', 'max_patients', 'is_active', 'is_trial', 'trial_expires_at', 'user_count', 'patient_count', 'is_trial_expired', 'created_at', 'updated_at' ] read_only_fields = ['tenant_id', 'created_at', 'updated_at'] class AuditLogEntrySerializer(serializers.ModelSerializer): """ Audit log entry serializer. """ tenant_name = serializers.CharField(source='tenant.name', read_only=True) user_name = serializers.CharField(source='user.get_full_name', read_only=True) content_type_name = serializers.CharField(source='content_type.name', read_only=True) class Meta: model = AuditLogEntry fields = [ 'log_id', 'tenant', 'tenant_name', 'event_type', 'event_category', 'user', 'user_name', 'user_email', 'user_role', 'session_key', 'ip_address', 'user_agent', 'content_type', 'content_type_name', 'object_id', 'object_repr', 'action', 'description', 'changes', 'additional_data', 'patient_id', 'patient_mrn', 'risk_level', 'hipaa_relevant', 'gdpr_relevant', 'is_successful', 'error_message', 'timestamp', 'created_at' ] read_only_fields = ['log_id', 'created_at'] class SystemConfigurationSerializer(serializers.ModelSerializer): """ System configuration serializer. """ tenant_name = serializers.CharField(source='tenant.name', read_only=True) typed_value = serializers.ReadOnlyField(source='get_typed_value') updated_by_name = serializers.CharField(source='updated_by.get_full_name', read_only=True) class Meta: model = SystemConfiguration fields = [ 'id', 'tenant', 'tenant_name', 'key', 'value', 'data_type', 'category', 'description', 'validation_rules', 'default_value', 'is_sensitive', 'is_encrypted', 'required_permission', 'is_active', 'is_readonly', 'typed_value', 'created_at', 'updated_at', 'updated_by', 'updated_by_name' ] read_only_fields = ['created_at', 'updated_at'] class SystemNotificationSerializer(serializers.ModelSerializer): """ System notification serializer. """ tenant_name = serializers.CharField(source='tenant.name', read_only=True) created_by_name = serializers.CharField(source='created_by.get_full_name', read_only=True) is_visible = serializers.ReadOnlyField() class Meta: model = SystemNotification fields = [ 'notification_id', 'tenant', 'tenant_name', 'title', 'message', 'notification_type', 'priority', 'target_audience', 'target_roles', 'is_dismissible', 'auto_dismiss_after', 'show_on_login', 'start_date', 'end_date', 'action_url', 'action_text', 'is_active', 'is_visible', 'created_at', 'created_by', 'created_by_name' ] read_only_fields = ['notification_id', 'created_at'] class IntegrationLogSerializer(serializers.ModelSerializer): """ Integration log serializer. """ tenant_name = serializers.CharField(source='tenant.name', read_only=True) class Meta: model = IntegrationLog fields = [ 'log_id', 'tenant', 'tenant_name', 'integration_type', 'direction', 'external_system', 'endpoint', 'message_type', 'message_id', 'correlation_id', 'request_data', 'response_data', 'status', 'error_code', 'error_message', 'processing_time_ms', 'timestamp', 'created_at' ] read_only_fields = ['log_id', 'created_at']