import 'package:auto_route/auto_route.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:island/models/post.dart';
import 'package:island/route.gr.dart';
import 'package:island/widgets/content/cloud_file_collection.dart';
import 'package:island/widgets/content/cloud_files.dart';
import 'package:island/widgets/content/markdown.dart';
import 'package:lucide_icons/lucide_icons.dart';
import 'package:styled_widget/styled_widget.dart';

class PostItem extends StatelessWidget {
  final SnPost item;
  final EdgeInsets? padding;
  final bool isOpenable;
  const PostItem({
    super.key,
    required this.item,
    this.padding,
    this.isOpenable = true,
  });

  @override
  Widget build(BuildContext context) {
    final renderingPadding =
        padding ?? EdgeInsets.symmetric(horizontal: 12, vertical: 16);

    return CupertinoContextMenu.builder(
      actions: [
        CupertinoContextMenuAction(
          trailingIcon: LucideIcons.edit,
          onPressed: () {
            context.router.push(PostEditRoute(id: item.id));
          },
          child: Text('Edit'),
        ),
      ],
      builder: (context, animation) {
        return Material(
          color: Theme.of(context).colorScheme.surface,
          child: SingleChildScrollView(
            physics: const NeverScrollableScrollPhysics(),
            child: Padding(
              padding: renderingPadding,
              child: Column(
                spacing: 8,
                children: [
                  Row(
                    mainAxisSize: MainAxisSize.min,
                    crossAxisAlignment: CrossAxisAlignment.start,
                    spacing: 12,
                    children: [
                      ProfilePictureWidget(item: item.publisher.picture),
                      Expanded(
                        child: GestureDetector(
                          child: Column(
                            crossAxisAlignment: CrossAxisAlignment.start,
                            children: [
                              Text(item.publisher.nick).bold(),
                              if (item.content.isNotEmpty)
                                MarkdownTextContent(content: item.content),
                            ],
                          ),
                          onTap: () {
                            if (isOpenable) {
                              context.router.push(PostDetailRoute(id: item.id));
                            }
                          },
                        ),
                      ),
                    ],
                  ),
                  if (item.attachments.isNotEmpty)
                    CloudFileList(files: item.attachments),
                ],
              ),
            ),
          ),
        );
      },
    );
  }
}