//
//  PlaybookUIKitPage.swift
//  SurfPlaybook
//
//  Created by Александр Чаусов on 15.04.2021.
//  Copyright © 2021 Surf. All rights reserved.
//

import Foundation

/// Протокол, который должна реализовывать каждая страница UIKIt-а в рамках playbook-а.
///
/// Протокол, определяющий страницу UIKIt-а, где каждая страница имеет
/// id, название (будет показано пользователю), а также ViewModel,
/// которая будет отвечать за построение таблицы.
///
/// Суть механизма следующая: при выборе какой-либо страницы на экране со списком
/// страниц UIKit-а будет открыт табличный экран, за наполнение которого отвечает
/// соответствующая ViewModel страницы UIKit-а.
/// Таким образом, в рамках реализации ViewModel-и вы можете сконфигурировать таблицу
/// каким угодно контентом на ваше усмотрение.
///
/// Изначально преследуемая цель - дать возможность отразить UIKit разрабатываемого приложения,
/// для которого реализуется playbook, внутри playbook-а.
/// Это может быть как и палитра цветов, так и используемые шрифты или все используемые стили кнопок.
/// Главное - не ограничивать фантазию разработчика, дав ему инструмент,
/// который бы наиболее полно смог отразить brand-book или UIKit именно его проекта.
public protocol PlaybookUIKitPage {
    /// Идентификатор страницы UIKit-а,
    /// должен быть уникальным в рамках всех остальных подобных страниц
    var id: String { get }
    /// Название страницы, будет отображено в UI
    var name: String { get }
    /// ViewModel, отвечающая за заполнение контентом табличного экрана
    var viewModel: UIKitPageViewModel { get }
}
