import 'package:flutter/material.dart';
import 'package:okane/screen.dart';
import 'package:okane/ui/widgets/piechart.dart';

class ResponsiveCard extends StatelessWidget {
  final String titleText;
  final String? subtitleText;

  final Widget child;

  const ResponsiveCard({
    super.key,
    required this.titleText,
    required this.child,
    this.subtitleText,
  });

  @override
  Widget build(BuildContext context) {
    final screenSize = getScreenSize(context);
    final card = Card(
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.center,
        children: [
          Padding(
            padding: EdgeInsets.only(top: 8, left: 8, right: 8),
            child: Text(
              titleText,
              style: Theme.of(
                context,
              ).textTheme.titleLarge!.copyWith(fontWeight: FontWeight.bold),
            ),
          ),

          child,

          if (subtitleText != null)
            Padding(padding: EdgeInsets.all(8), child: Text(subtitleText!)),
        ],
      ),
    );
    return switch (screenSize) {
      ScreenSize.small => Row(children: [Expanded(child: card)]),
      ScreenSize.normal => Container(
        constraints: BoxConstraints(maxWidth: ScreenSize.normal.size),
        child: card,
      ),
    };
  }
}

class PieChartCard extends StatelessWidget {
  final String titleText;

  // Text to display when items is empty.
  final String fallbackText;

  final OkanePieChartValueConverter valueConverter;

  final List<OkanePieChartSection> items;

  const PieChartCard({
    super.key,
    this.valueConverter = numToString,
    required this.items,
    required this.fallbackText,
    required this.titleText,
  });

  @override
  Widget build(BuildContext context) {
    final child =
        items.isEmpty
            ? SizedBox(
              width: 150,
              height: 150,
              child: Center(child: Text(fallbackText)),
            )
            : OkanePieChart(valueConverter: valueConverter, items: items);

    return ResponsiveCard(titleText: titleText, child: child);
  }
}