//
//  ColorManager.swift
//  RealCalendar
//
//  Created by UPs Lee on 2022/03/22.
//  Copyright © 2022 UPs. All rights reserved.
//

import UIKit
//
//final class ColorMamager {
//
//  let passwordColor: ColorInfo
//
//  init() {
//    self.passwordColor = ColorInfo(
//      category: .password,
//      style: .normal,
//      colors: [
//        ColorPalette(description: "숫자패드 폰트색", red: 1, greend: 0, blue: 0),
//        ColorPalette(description: "숫자패드 배경색", red: 0, greend: 1, blue: 0)
//      ]
//    )
//  }
//}
//
//enum PasswordColor: String, Codable {
//
//  case date
//  case password
//  case padNumber
//  case padBackGround
//}
//
//extension PasswordColor: ColorProtocol {
//
//  var key: String {
//    String(describing: self) + self.rawValue
//  }
//
//  var view: UIView.Type {
//    PasswordView.self
//  }
//
//  var base: UIColor {
//    switch self {
//    case .date:
//      return UIColor(red: 1, green: 0, blue: 0, alpha: 1)
//    case .password:
//      return UIColor(red: 1, green: 0, blue: 0, alpha: 1)
//    case .padNumber:
//      return UIColor(red: 1, green: 0, blue: 0, alpha: 1)
//    case .padBackGround:
//      return UIColor(red: 1, green: 0, blue: 0, alpha: 1)
//    }
//  }
//  
//}
//
//protocol ColorProtocol {
//  var key: String { get }
//  var view: UIView.Type { get }
//  var base: UIColor { get }
//}
//
//extension ColorProtocol {
//
//  var udkey: String {
//    String(reflecting: self)
//  }
//
//  var color: UIColor {
//    if let data = UserDefaults.standard.data(forKey: self.key) {
//      return UIColor.red
//    } else {
//      return self.base
//    }
//  }
//}
//
//
//
//
//
//
//
//enum ColorCategory: String, Codable {
//
//  case password
//
//  var view: UIView.Type {
//    switch self {
//    case .password:
//      return SplashView.self
//    }
//  }
//}
//
//enum ViewStyle: Codable {
//
//  case normal
//  case tableView
//  case colloectionView
//}
//
//struct ColorInfo: ColorInfoProtocol, Codable {
//
//  var category: ColorCategory
//  var style: ViewStyle
//  var colors: [ColorPalette]
//}
//
//protocol ColorInfoProtocol {
//
//  var category: ColorCategory { get }
//  var style: ViewStyle { get }
//  var colors: [ColorPalette] { get set }
//}
//
//struct ColorPalette: ColorPaletteProtocol, Codable {
//
//  var key: String?
//  var description: String
//  var red: CGFloat
//  var greend: CGFloat
//  var blue: CGFloat
//}
//
//protocol ColorPaletteProtocol {
//
//  var key: String? { get set }
//  var description: String { get set }
//  var red: CGFloat { get set }
//  var greend: CGFloat { get set }
//  var blue: CGFloat { get set }
//}
//
//extension ColorPaletteProtocol {
//
//  var color: UIColor {
//    UIColor(red: self.red, green: self.greend, blue: self.blue, alpha: 1)
//  }
//}


enum SplashColor: Codable {
  
  case titleText
  case titleBackgorund
  case viewBackground
}

extension SplashColor: ColorProtocol {
  
  var title: String {
    "시작 화면"
  }
  
  var viewClass: UIView.Type {
    SplashView.self
  }
  
  
  var viewStyle: ViewStyle {
    .view
  }
  
  var base: UIColor {
    return UIColor(red: 1, green: 0, blue: 0, alpha: 1  )
  }
  
}

enum PasswordColor: Codable {
  
  case titleText
  case dateText
  case passwordText
  case padNumber
  case padBackground
}

extension PasswordColor: ColorProtocol {
  
  var title: String {
    "앱 비밀번호 입력 화면"
  }
  
  var viewClass: UIView.Type {
    PasswordView.self
  }
  
  var viewStyle: ViewStyle {
    .view
  }
  
  var base: UIColor {
    return UIColor(red: 1, green: 0, blue: 0, alpha: 1  )
  }
  
}

protocol ColorProtocol {
  var title: String { get }
  var viewClass: UIView.Type { get }
  var viewStyle: ViewStyle { get }
  var base: UIColor { get }
}

enum ViewStyle: Codable {

  case view
  case tableViewCell
  case colloectionViewCell
}

extension ColorProtocol {
  
  var key: String {
    String(reflecting: self)
  }
  
  var udkey: String {
    self.key + "." + ColorManager.colorStyle
  }
  
  var color: UIColor {
    if let data = UserDefaults.standard.data(forKey: self.udkey) {
      return UIColor.red
    } else {
      return self.base
    }
  }
}

class ColorManager {
  
  func saveColor(name: String) {
    
  }
  
  enum Keys: String {
    case colorStyle
    case colorKeys
  }
  
  static var colorStyle: String {
    get {
      UserDefaults.standard.string(forKey: Keys.colorStyle.rawValue) ?? "default"
    }
    set {
      UserDefaults.standard.set(Keys.colorStyle.rawValue, forKey: newValue)
    }
  }
  
  static var colorKeys: [String] {
    get {
      UserDefaults.standard.array(forKey: Keys.colorKeys.rawValue) as? [String] ?? ["default"]
    }
    set {
      let value = newValue
      var array = self.colorKeys
      array.append(contentsOf: value)
      UserDefaults.standard.set(array, forKey: Keys.colorStyle.rawValue)
    }
  }
  
}


struct RGB: Codable {
  
  let red: CGFloat
  let green: CGFloat
  let blue: CGFloat
}
