// @dart=2.9

import 'dart:math' as math;

import 'package:ente_auth/ente_theme_data.dart';
import 'package:flutter/material.dart';

class DynamicFAB extends StatelessWidget {
  final bool isKeypadOpen;
  final bool isFormValid;
  final String buttonText;
  final Function onPressedFunction;

  const DynamicFAB({
    Key key,
    this.isKeypadOpen,
    this.buttonText,
    this.isFormValid,
    this.onPressedFunction,
  }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    if (isKeypadOpen) {
      return Container(
        decoration: BoxDecoration(
          boxShadow: [
            BoxShadow(
              color: Theme.of(context).backgroundColor,
              spreadRadius: 200,
              blurRadius: 100,
              offset: const Offset(0, 230),
            )
          ],
        ),
        width: double.infinity,
        child: Row(
          mainAxisAlignment: MainAxisAlignment.end,
          children: [
            FloatingActionButton(
              heroTag: 'FAB',
              backgroundColor:
                  Theme.of(context).colorScheme.dynamicFABBackgroundColor,
              foregroundColor:
                  Theme.of(context).colorScheme.dynamicFABTextColor,
              onPressed: isFormValid
                  ? onPressedFunction
                  : () {
                      FocusScope.of(context).unfocus();
                    },
              child: Transform.rotate(
                angle: isFormValid ? 0 : math.pi / 2,
                child: const Icon(
                  Icons.chevron_right,
                  size: 36,
                ),
              ), //keypad down here
            ),
          ],
        ),
      );
    } else {
      return Container(
        width: double.infinity,
        height: 56,
        padding: const EdgeInsets.symmetric(horizontal: 20),
        child: OutlinedButton(
          onPressed: isFormValid ? onPressedFunction : null,
          child: Text(buttonText),
        ),
      );
    }
  }
}

class NoScalingAnimation extends FloatingActionButtonAnimator {
  @override
  Offset getOffset({Offset begin, Offset end, double progress}) {
    return end;
  }

  @override
  Animation<double> getRotationAnimation({Animation<double> parent}) {
    return Tween<double>(begin: 1.0, end: 1.0).animate(parent);
  }

  @override
  Animation<double> getScaleAnimation({Animation<double> parent}) {
    return Tween<double>(begin: 1.0, end: 1.0).animate(parent);
  }
}
