; SPDX-FileCopyrightText: 2023 Jummit
;
; SPDX-License-Identifier: GPL-3.0-or-later

(fn get-start-cells-for [world player]
  (icollect [_ entity (ipairs world)]
    (match entity {:cell {:start-for player}} entity)))

(fn is-online [card]
  (or (= card.kind :link) (= card.kind :virus)))

(fn get-online-of [world player]
  (icollect [_ entity (ipairs world)]
    (match entity
      (where {:card {:owner player}} (is-online entity.card)) entity)))

(fn get-cards-on [world x y]
  (icollect [_ entity (ipairs world)]
    (if (and entity.card (= entity.circuit-x x) (= entity.circuit-y y)) entity)))

(fn get-cell [world x y]
  (var cell nil)
  (each [_ entity (ipairs world)]
    (match entity
      (where {:circuit-x x :circuit-y y} entity.cell) (set cell entity)))
  cell)

{: get-start-cells-for : get-online-of : is-online : get-cards-on : get-cell}