diff GeoQuiz/Models/GameInfoModel+Protocol.swift @ 26:425078c01194

refactor code
author Dennis C. M. <dennis@denniscm.com>
date Wed, 09 Nov 2022 10:30:01 +0100
parents GeoQuiz/Logic/GameInfoController.swift@f140bb277c96
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/GeoQuiz/Models/GameInfoModel+Protocol.swift	Wed Nov 09 10:30:01 2022 +0100
@@ -0,0 +1,90 @@
+//
+//  GameInfoModel+Protocol.swift
+//  GeoQuiz
+//
+//  Created by Dennis Concepción Martín on 22/10/22.
+//
+
+import Foundation
+import SwiftUI
+
+protocol GameInfo {
+    var type: GameType { get }
+    var level: String { get }
+    var name: String { get }
+    var isPremium: Bool { get }
+    var symbol: String { get }
+    var gradient: Gradient { get }
+    var numberOfQuestions: Int { get }
+}
+
+class GameInfoModel {
+    static func getInfo(for gameType: GameType) -> GameInfo {
+        switch gameType {
+        case .guessTheFlag:
+            return GuessTheFlagInfo()
+        case .guessTheCapital:
+            return GuessTheCapitalInfo()
+        case .guessTheCountry:
+            return GuessTheCountryInfo()
+        case .guessThePopulation:
+            return GuessThePopulationInfo()
+        }
+    }
+    
+    private struct GuessTheFlagInfo: GameInfo {
+        let type: GameType = .guessTheFlag
+        let level = "Level 1"
+        let name = "Guess the flag"
+        let isPremium = false
+        let symbol = "flag.fill"
+        let gradient: Gradient = .main
+        
+        var numberOfQuestions: Int {
+            let data: CountryModel = Bundle.main.decode("countries.json")
+            return data.countries.count
+        }
+    }
+
+    private struct GuessTheCapitalInfo: GameInfo {
+        let type: GameType = .guessTheFlag
+        let level = "Level 2"
+        let name = "Guess the capital"
+        let isPremium = false
+        let symbol = "building.2.fill"
+        let gradient: Gradient = .secondary
+        
+        var numberOfQuestions: Int {
+            let data: CountryModel = Bundle.main.decode("countries.json")
+            return data.countries.count
+        }
+    }
+
+    private struct GuessTheCountryInfo: GameInfo {
+        let type: GameType = .guessTheFlag
+        let level = "Level 3"
+        let name = "Guess the country"
+        let isPremium = false
+        let symbol = "globe.americas.fill"
+        let gradient: Gradient = .tertiary
+        
+        var numberOfQuestions: Int {
+            let data: CityModel = Bundle.main.decode("cities.json")
+            return data.cities.count
+        }
+    }
+
+    private struct GuessThePopulationInfo: GameInfo {
+        let type: GameType = .guessTheFlag
+        let level = "Level 4"
+        let name = "Guess the population"
+        let isPremium = false
+        let symbol = "person.fill"
+        let gradient: Gradient = .quaternary
+        
+        var numberOfQuestions: Int {
+            let data: CityModel = Bundle.main.decode("cities.json")
+            return data.cities.count
+        }
+    }
+}