// Copyright (C) 2023 WYATT GROUP
// Please see the AUTHORS file for details.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.

import 'package:flutter/material.dart';
import 'package:wyatt_ui_components/src/features/features.dart';

class ComponentTheme extends StatelessWidget {

  const ComponentTheme({
    required this.child,
    required this.componentThemeWidget,
    super.key,
  });
  final Widget child;
  final ComponentThemeData componentThemeWidget;

  static ComponentThemeData of(BuildContext context) {
    final _InheritedComponentTheme? inheritedThemeComponent =
        context.dependOnInheritedWidgetOfExactType<_InheritedComponentTheme>();

    assert(
      inheritedThemeComponent != null,
      'Theme component not find in tree',
    );
    return inheritedThemeComponent!.themeWidget.componentThemeWidget;
  }

  @override
  Widget build(BuildContext context) => _InheritedComponentTheme(
        this,
        child: child,
      );
}

class _InheritedComponentTheme extends InheritedWidget {
  const _InheritedComponentTheme(
    this.themeWidget, {
    required super.child,
  });
  final ComponentTheme themeWidget;

  @override
  bool updateShouldNotify(covariant InheritedWidget oldWidget) =>
      oldWidget != this;
}
