using Game.Extensions;
using Godot;

namespace Game;

[SceneTree]
public partial class TimeSlot : PanelContainer
{
    public MeetingControl MeetingControl { get; set; }

    public override bool _CanDropData(Vector2 atPosition, Variant data)
    {
        return data.VariantType == Variant.Type.Object
            && data.AsGodotObject() is MeetingControlDragData;
    }

    public override void _DropData(Vector2 atPosition, Variant data)
    {
        var meetingData = (MeetingControlDragData)data;

        MeetingControl = meetingData.MeetingControl;
        MeetingControl.Reparent(this, false);
        MeetingControl.Visible = true;

        meetingData.MeetingControl.DragIsHandled = true;
    }

    public override void _Notification(int what)
    {
        if (what == NotificationDragBegin)
            MouseFilter = MouseFilterEnum.Pass;

        if (what == NotificationDragEnd)
            MouseFilter = MouseFilterEnum.Ignore;
    }

    public void StartMeeting()
    {
        GD.Print("New Meeting starts!");
        var gameState = this.GetMain().GameState;

        // TODO: TimeSlot hat bekommt die MeetingResource on Drop?? oder zumindest nicht über Gfx gehen
        MeetingControl?.MeetingControlGfx.MeetingResource.StartMeeting(gameState);
        MeetingControl?.Animate();
    }

    public void EndMeeting()
    {
        GD.Print("Meeting Ends!");
        var gameState = this.GetMain().GameState;

        // TODO: TimeSlot hat bekommt die MeetingResource on Drop?? oder zumindest nicht über Gfx gehen
        MeetingControl?.MeetingControlGfx.MeetingResource.EndMeeting(gameState);
    }
}
