import { Action, ActionKind } from "../../model/tactic/Action"
import BendableArrow from "../../components/arrows/BendableArrow"
import { RefObject } from "react"
import { MoveToHead, ScreenHead } from "../../components/actions/ArrowAction"

export interface CourtActionProps {
    action: Action
    onActionChanges: (a: Action) => void
    onActionDeleted: () => void
    courtRef: RefObject<HTMLElement>
}

export function CourtAction({
    action,
    onActionChanges,
    onActionDeleted,
    courtRef,
}: CourtActionProps) {
    let head
    switch (action.type) {
        case ActionKind.DRIBBLE:
        case ActionKind.MOVE:
        case ActionKind.SHOOT:
            head = () => <MoveToHead />
            break
        case ActionKind.SCREEN:
            head = () => <ScreenHead />
            break
    }

    let dashArray
    switch (action.type) {
        case ActionKind.SHOOT:
            dashArray = "10 5"
            break
    }

    return (
        <BendableArrow
            forceStraight={action.type == ActionKind.SHOOT}
            area={courtRef}
            startPos={action.moveFrom}
            segments={action.segments}
            onSegmentsChanges={(edges) => {
                onActionChanges({ ...action, segments: edges })
            }}
            wavy={action.type == ActionKind.DRIBBLE}
            //TODO place those magic values in constants
            endRadius={action.toId ? 26 : 17}
            startRadius={10}
            onDeleteRequested={onActionDeleted}
            style={{
                head,
                dashArray,
            }}
        />
    )
}
