опиши структуру проекта: import androidx.room.Entity

//### 1. Проектирование приложения
//
//#### Архитектура
//- Паттерн проектирования: MVVM (Model-View-ViewModel)
//- Компоненты:
//- LiveData
//- ViewModel
//- Repository
//- Room (для локальной базы данных)
//- Retrofit (для коммуникации с сервером, если потребуется)
//
//### 2. Структура проекта
//
//- data:
//- model: классы для представления данных.
//- dao: интерфейсы для взаимодействия с базой данных.
//- repository: управление данными, выбор источников данных.
//- network: класс для работы с сетью (если нужно).
//- database: база данных Room.
//- ui:
//- view: активности и фрагменты.
//- viewmodel: ViewModel для UI.
//- util: утилиты и вспомогательные классы.
//
//### 3. Пример Базы Данных
//
//Используем Room для локальной базы данных.
//
//#### Определение модели данных (Карт)


@Entity(tableName = "cards")
data class Card(
    @PrimaryKey val id: Int,
    val name: String,
    val cost: Int,
    val type: String,
    val abilities: String,
    val effects: String,
    val marks: String
)



//#### DAO для доступа к данным


@Dao
interface CardDao {
    @Query("SELECT * FROM cards")
    fun getAllCards(): LiveData<List<Card>>

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    suspend fun insert(card: Card)

    @Delete
    suspend fun delete(card: Card)
}



//#### База данных


@Database(entities = [Card::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
    abstract fun cardDao(): CardDao

    companion object {
        @Volatile
        private var INSTANCE: AppDatabase? = null

        fun getDatabase(context: Context): AppDatabase {
            val tempInstance = INSTANCE
            if (tempInstance != null) {
                return tempInstance
            }
            synchronized(this) {
                val instance = Room.databaseBuilder(
                    context.applicationContext,
                    AppDatabase::class.java,
                    "app_database"
                ).build()
                INSTANCE = instance
                return instance
            }
        }
    }
}



//### 4. Репозиторий
//
//Репозиторий служит посредником между базой данных и ViewModel.


class CardRepository(private val cardDao: CardDao) {

    val allCards: LiveData<List<Card>> = cardDao.getAllCards()

    @Suppress("RedundantSuspendModifier")
    @WorkerThread
    suspend fun insert(card: Card) {
        cardDao.insert(card)
    }

    @Suppress("RedundantSuspendModifier")
    @WorkerThread
    suspend fun delete(card: Card) {
        cardDao.delete(card)
    }
}



//### 5. ViewModel


class CardViewModel(application: Application) : AndroidViewModel(application) {

    private val repository: CardRepository
    val allCards: LiveData<List<Card>>

    init {
        val cardDao = AppDatabase.getDatabase(application).cardDao()
        repository = CardRepository(cardDao)
        allCards = repository.allCards
    }

    fun insert(card: Card) = viewModelScope.launch {
        repository.insert(card)
    }

    fun delete(card: Card) = viewModelScope.launch {
        repository.delete(card)
    }
}



//### 6. UI - Активность (MainActivity)


class MainActivity : AppCompatActivity() {

    private lateinit var cardViewModel: CardViewModel

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // Получение ViewModel
        cardViewModel = ViewModelProvider(this).get(CardViewModel::class.java)

        // Наблюдение за изменением LiveData
        cardViewModel.allCards.observe(this, Observer { cards ->
            // Обновление UI
        })
    }

    fun addCard() {
        // Пример добавления карты
        val card = Card(id = 1, name = "John Sheridan", cost = 5, type = "character", abilities = "leadership:5", effects = "none", marks = "none")
        cardViewModel.insert(card)
    }
}



//### 7. UI - activity_main.xml (макет главной активности)


<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp"
android:orientation="vertical"
tools:context=".MainActivity">

<Button
android:id="@+id/button_add_card"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Add Card"
android:onClick="addCard"/>

<RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>

</LinearLayout>



//### 8. Адаптер для RecyclerView


class CardListAdapter : RecyclerView.Adapter<CardListAdapter.CardViewHolder>() {

    private var cards = emptyList<Card>()

    class CardViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        val textView: TextView = itemView.findViewById(R.id.textView)
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CardViewHolder {
        val itemView = LayoutInflater.from(parent.context).inflate(R.layout.recyclerview_item, parent, false)
        return CardViewHolder(itemView)
    }

    override fun onBindViewHolder(holder: CardViewHolder, position: Int) {
        val current = cards[position]
        holder.textView.text = current.name
    }

    internal fun setCards(cards: List<Card>) {
        this.cards = cards
        notifyDataSetChanged()
    }

    override fun getItemCount() = cards.size
}