package dev.fyloz.plannervio.core.repository.memory

import dev.fyloz.plannervio.core.model.*
import dev.fyloz.plannervio.core.model.Board
import dev.fyloz.plannervio.core.repository.IBoardRepository

class MemoryBoardRepository : IBoardRepository {
    private val boards = mutableListOf<Board>()

    init {
        save(
            boardFactory(
                0L,
                "Board 1",
                "Voluptates facere maiores quis suscipit nostrum. Et accusamus quas animi. Similique reiciendis ea iste cum sunt aut minus. Aut cupiditate consequatur dolor vel doloremque aut eius voluptas. Sed reprehenderit veniam odio voluptatem numquam doloribus. Consequuntur esse assumenda aut expedita voluptatibus.",
                BackgroundImage("bundled_background_0.jpg")
            )
        )
        save(
            boardFactory(
                1L,
                "test",
                "Libero rerum sed dolore repudiandae id voluptatem. In iusto nesciunt nihil quia vel ut qui quae. Nihil eos similique corporis fugit autem reiciendis vel. Aut neque quas reprehenderit reiciendis officia non.",
                BackgroundImage("bundled_background_1.jpg")
            )
        )
        save(
            privateBoardFactory(
                2L,
                "Board 3",
                "Pariatur error dolores beatae et rem minus a quia. Facilis nam esse repellat consequatur aperiam nostrum aut vel. Non ratione aut maiores beatae molestiae maxime ipsum molestiae. Asperiores est id in quia tempore soluta voluptatem atque.",
                BackgroundImage("bundled_background_3.jpg"),
                "password",
                mutableListOf(
                    User("username", "username@email.com", "password")
                )
            )
        )
        save(
            boardFactory(
                3L,
                "test",
                "Libero rerum sed dolore repudiandae id voluptatem. In iusto nesciunt nihil quia vel ut qui quae. Nihil eos similique corporis fugit autem reiciendis vel. Aut neque quas reprehenderit reiciendis officia non.",
                BackgroundImage("bundled_background_1.jpg")
            )
        )
        save(
            boardFactory(
                4L,
                "test",
                "Libero rerum sed dolore repudiandae id voluptatem. In iusto nesciunt nihil quia vel ut qui quae. Nihil eos similique corporis fugit autem reiciendis vel. Aut neque quas reprehenderit reiciendis officia non.",
                BackgroundImage("bundled_background_1.jpg")
            )
        )
        save(
            boardFactory(
                5L,
                "test",
                "Libero rerum sed dolore repudiandae id voluptatem. In iusto nesciunt nihil quia vel ut qui quae. Nihil eos similique corporis fugit autem reiciendis vel. Aut neque quas reprehenderit reiciendis officia non.",
                BackgroundImage("bundled_background_1.jpg")
            )
        )
        save(
            boardFactory(
                6L,
                "test",
                "Libero rerum sed dolore repudiandae id voluptatem. In iusto nesciunt nihil quia vel ut qui quae. Nihil eos similique corporis fugit autem reiciendis vel. Aut neque quas reprehenderit reiciendis officia non.",
                BackgroundImage("bundled_background_1.jpg")
            )
        )
        save(
            boardFactory(
                7L,
                "test",
                "Libero rerum sed dolore repudiandae id voluptatem. In iusto nesciunt nihil quia vel ut qui quae. Nihil eos similique corporis fugit autem reiciendis vel. Aut neque quas reprehenderit reiciendis officia non.",
                BackgroundImage("bundled_background_1.jpg")
            )
        )
    }

    override fun exists(board: Board): Boolean {
        return boards.contains(board)
    }

    override fun findAll(): List<Board> {
        return boards
    }

    override fun findById(id: Long): Board? {
        return boards.firstOrNull {
            it.id == id
        }
    }

    override fun save(board: Board) {
        boards.add(board)
    }

    override fun delete(board: Board) {
        boards.remove(board)
    }
}
