import 'package:flutter/material.dart';
import 'package:island/models/thought.dart';
import 'package:island/widgets/content/markdown.dart';
import 'package:island/widgets/thought/thought_proposal.dart';

class ThoughtContent extends StatelessWidget {
  const ThoughtContent({
    super.key,
    required this.isStreaming,
    required this.streamingText,
    this.thought,
  });

  final bool isStreaming;
  final String streamingText;
  final SnThinkingThought? thought;

  bool get _isErrorMessage {
    if (thought == null) return false;
    // Check if this is an error thought by ID or content
    if (thought!.id.startsWith('error-')) return true;
    final textParts = thought!.parts
        .where((p) => p.type == ThinkingMessagePartType.text)
        .map((p) => p.text ?? '')
        .join('');
    return textParts.startsWith('Error:');
  }

  @override
  Widget build(BuildContext context) {
    final content = streamingText.isNotEmpty
        ? streamingText
        : thought != null
        ? thought!.parts
              .where((p) => p.type == ThinkingMessagePartType.text)
              .map((p) => p.text ?? '')
              .join('')
        : '';

    if (content.isEmpty) return const SizedBox.shrink();

    final isError = content.startsWith('Error:') || _isErrorMessage;

    return Container(
      padding: isError ? const EdgeInsets.all(8) : EdgeInsets.zero,
      decoration: isError
          ? BoxDecoration(
              border: Border.all(
                color: Theme.of(context).colorScheme.error,
                width: 1,
              ),
              borderRadius: BorderRadius.circular(8),
            )
          : null,
      child: MarkdownTextContent(
        isSelectable: true,
        content: content,
        extraBlockSyntaxList: [ProposalBlockSyntax()],
        textStyle: Theme.of(context).textTheme.bodyMedium!.copyWith(
          color: isError ? Theme.of(context).colorScheme.error : null,
        ),
        extraGenerators: [
          ProposalGenerator(
            backgroundColor: Theme.of(context).colorScheme.secondaryContainer,
            foregroundColor: Theme.of(context).colorScheme.onSecondaryContainer,
            borderColor: Theme.of(context).colorScheme.outline,
          ),
        ],
      ),
    );
  }
}
