view GeoQuiz/Logic/GameInfoController.swift @ 19:f140bb277c96

refactor code
author Dennis C. M. <dennis@denniscm.com>
date Sun, 23 Oct 2022 00:11:38 +0100
parents
children
line wrap: on
line source

//
//  GameInfoController.swift
//  GeoQuiz
//
//  Created by Dennis Concepción Martín on 22/10/22.
//

import Foundation
import SwiftUI

class GameInfoController {
    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 = FileController.load("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 = FileController.load("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 = FileController.load("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 = FileController.load("cities.json")
            return data.cities.count
        }
    }
}