//
//  AlertProtocol.swift
//  VariousManagerDemoApp
//
//  Created by JungpyoHong on 4/21/21.
//

import UIKit

enum AlertButton: String {
    case ok
    case cancel
    case delete
    case settings
}

protocol AlertProtocol: UIViewController {
    func showAlert(title: String, message: String, buttons: [AlertButton], completion: @escaping (UIAlertController, AlertButton) -> Void)
}

extension AlertProtocol {
    
    func showAlert(title: String, message: String, buttons: [AlertButton] = [.ok], completion: @escaping (UIAlertController, AlertButton) -> Void) {
        
        let alert = UIAlertController(title: title, message: message, preferredStyle: .alert)
        
        buttons.forEach { button in
            let action = UIAlertAction(title: button.rawValue.capitalized, style: button == .delete ? .destructive : .default) { [alert, button] _ in
                completion(alert, button)
            }
            alert.addAction(action)
        }
        self.present(alert, animated: true, completion: nil)
    }
}

protocol CellReusable {
    static var identifier: String { get }
}

extension CellReusable {
    static var identifier: String {
        String(describing: self)
    }
}