import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:selfprivacy/ui/components/brand_linear_indicator/brand_linear_indicator.dart';
import 'package:selfprivacy/logic/models/disk_status.dart';

class ServerStorageListItem extends StatelessWidget {
  const ServerStorageListItem({
    required this.volume,
    final this.showIcon = true,
    final this.dense = false,
    final super.key,
  });

  final DiskVolume volume;
  final bool showIcon;
  final bool dense;

  @override
  Widget build(final BuildContext context) => ConsumptionListItem(
        title: 'providers.storage.disk_usage'.tr(
          args: [
            volume.sizeUsed.toString(),
          ],
        ),
        subtitle: 'providers.storage.disk_total'.tr(
          args: [
            volume.sizeTotal.toString(),
            volume.displayName,
          ],
        ),
        dense: dense,
        color: volume.root
            ? Theme.of(context).colorScheme.primary
            : Theme.of(context).colorScheme.secondary,
        backgroundColor: Theme.of(context).colorScheme.surfaceVariant,
        percentage: volume.percentage,
        icon: Icon(
          Icons.storage_outlined,
          size: 24,
          color: Theme.of(context).colorScheme.onBackground,
        ),
      );
}

class ConsumptionListItem extends StatelessWidget {
  const ConsumptionListItem({
    required this.title,
    required this.color,
    required this.backgroundColor,
    required this.percentage,
    this.subtitle,
    this.rightSideText,
    this.icon,
    this.dense = false,
    final super.key,
  });

  final String title;
  final String? subtitle;
  final String? rightSideText;
  final Color color;
  final Color backgroundColor;
  final double percentage;
  final Widget? icon;
  final bool dense;

  @override
  Widget build(final BuildContext context) {
    final TextStyle? titleStyle = dense
        ? Theme.of(context).textTheme.titleMedium
        : Theme.of(context).textTheme.titleLarge;

    final TextStyle? subtitleStyle = dense
        ? Theme.of(context).textTheme.bodySmall
        : Theme.of(context).textTheme.bodyMedium;

    return Row(
      crossAxisAlignment: CrossAxisAlignment.center,
      children: [
        if (icon != null) icon!,
        if (icon != null) const SizedBox(width: 16),
        Expanded(
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: [
              Row(
                mainAxisAlignment: rightSideText != null
                    ? MainAxisAlignment.spaceBetween
                    : MainAxisAlignment.start,
                children: [
                  Text(
                    title,
                    style: titleStyle,
                    textAlign: TextAlign.start,
                  ),
                  if (rightSideText != null)
                    Text(
                      rightSideText!,
                      style: Theme.of(context).textTheme.bodyMedium,
                      textAlign: TextAlign.end,
                    ),
                ],
              ),
              const SizedBox(height: 4),
              BrandLinearIndicator(
                value: percentage,
                color: color,
                backgroundColor: backgroundColor,
                height: dense ? 8.0 : 14.0,
              ),
              const SizedBox(height: 4),
              if (subtitle != null)
                Text(
                  subtitle!,
                  style: subtitleStyle,
                  textAlign: TextAlign.start,
                ),
            ],
          ),
        ),
      ],
    );
  }
}
