/** @module */
import { Tween } from '@tweenjs/tween.js'
/**
 */
/**
 * Shows a circle at the parent object xy coordinates.
 * Animates the circle when picking up and dropping.
 * @param {(Candidate|CandidateDn|VoterShape)} parent
 *  - something with x and y attributes.
 * @param {Number} r - radius of graphic
 * @param {String} color - color code
 * @param {Screen} screen - something with .ctx to draw to.
 * @constructor
 */
export default function CircleGraphic(parent, entity, r, screen) {
    const self = this
    self.r = r
    self.trueR = r
    self.pickUp = function () {
        self.tween = new Tween(self, screen.tweenGroup)
        self.tween.to({ r: self.trueR * 2 }, 100)
        self.tween.start()
    }
    self.drop = function () {
        self.tween = new Tween(self, screen.tweenGroup)
        self.tween.to({ r: self.trueR }, 100)
        self.tween.start()
    }
    // Graphics component
    self.render = function () {
        const { fctx } = screen
        const { darkMode } = screen.common
        const { color } = entity
        fctx.save()
        if (self.tween) {
            self.tween.update()
        }
        // handle
        if (entity.exists === 0) {
            fctx.globalAlpha = 0.2
        }
        fctx.beginPath()
        fctx.fillStyle = color
        if (darkMode) fctx.strokeStyle = 'white'
        fctx.arc(parent.x, parent.y, self.r, 0, 2 * Math.PI)
        fctx.fill()
        fctx.stroke()
        fctx.restore()
    }
}