import 'package:flutter/material.dart';

import 'package:puzzlegame/entities/tile.dart';
import 'package:puzzlegame/provider/data.dart';

class MovingTile extends Tile {
  int currentCol;
  int currentRow;

  MovingTile({
    required this.currentCol,
    required this.currentRow,
    required super.image,
    required super.size,
    required super.originalCol,
    required super.originalRow,
  });

  Container _tileWidget() {
    return Container(
      decoration: BoxDecoration(
        color: Colors.black,
        border: Border.all(
          color: Colors.black,
          width: 1,
        ),
      ),
      child: Image(
        image: image.image,
        width: size,
        height: size,
        fit: BoxFit.fill,
      ),
    );
  }

  @override
  Widget widget(Data myProvider) {
    return DragTarget<List<int>>(
      builder: (
        BuildContext context,
        List<dynamic> accepted,
        List<dynamic> rejected,
      ) {
        return Container(
          height: size,
          width: size,
          color: Colors.cyan,
          child: Draggable<List<int>>(
            data: [
              currentCol,
              currentRow,
            ],

            // Widget when draggable is being dragged
            feedback: _tileWidget(),

            // Widget to display on original place when being dragged
            childWhenDragging: Container(
              height: size,
              width: size,
              color: Colors.pinkAccent,
            ),

            // Widget when draggable is stationary
            child: _tileWidget(),
          ),
        );
      },
      onAcceptWithDetails: (DragTargetDetails<List<int>> source) {
        myProvider.swapTiles([currentCol, currentRow], source.data);
      },
    );
  }

  @override
  bool isCorrect() {
    return ((currentRow == originalRow) && (currentCol == originalCol));
  }
}