import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:pmu/data/repositories/api_user_repository.dart';
import 'package:pmu/domain/card.dart';
import 'package:pmu/presentation/detail_pages/card_detail_page.dart';
import 'package:pmu/presentation/home_page/card.dart';

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: const Body(),
    );
  }
}

class Body extends StatelessWidget {
  const Body({super.key});

  void _navToDetails(BuildContext context, CardPostData data) {
    Navigator.push(
      context,
      CupertinoPageRoute(builder: (context) => DetailPage(data)),
    );
  }

  void _showSnackBar(BuildContext context, String title, bool isLiked) {
    WidgetsBinding.instance.addPostFrameCallback((_) {
      ScaffoldMessenger.of(context).showSnackBar(SnackBar(
        content: Text(
          '${isLiked ? 'Вы поставили лайк: ' : 'Вы убрали лайк: '} $title',
          style: const TextStyle(
              color: Colors.black45, fontSize: 20, fontWeight: FontWeight.bold),
        ),
        backgroundColor: isLiked ? Colors.green : Colors.red,
        duration: const Duration(seconds: 2),
      ));
    });
  }

  @override
  Widget build(BuildContext context) {
    final data = ApiUserRepository().loadData();
    return Center(
      child: FutureBuilder<List<CardPostData>?>(
        future: data,
        builder: (context, snapshot) => SingleChildScrollView(
          child: snapshot.hasData
              ? Column(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: snapshot.data
                          ?.map((data) => CardPost.fromData(data,
                              onLike: (String title, bool isLiked) =>
                                  _showSnackBar(context, title, isLiked),
                              onTap: () => _navToDetails(context, data)))
                          .toList() ??
                      [])
              : const CircularProgressIndicator(),
        ),
      ),
    );
  }
}