OSDN Git Service

Doutakuを導入
[kcd/KCD.git] / KCD / KenzoMarkCommand.swift
1 //
2 //  KenzoMarkCommand.swift
3 //  KCD
4 //
5 //  Created by Hori,Masaki on 2017/01/12.
6 //  Copyright © 2017年 Hori,Masaki. All rights reserved.
7 //
8
9 import Cocoa
10
11 final class KenzoMarkCommand: JSONCommand {
12     
13     struct KenzoDockInfo {
14         let dockId: Int
15         let shipId: Int
16         let fuel: Int
17         let bull: Int
18         let steel: Int
19         let bauxite: Int
20         let kaihatusizai: Int
21     }
22     
23     override func execute() {
24         
25         let store = LocalDataStore.oneTimeEditor()
26         store.sync {
27             self.executeInContext(localStore: store)
28         }
29     }
30     
31     private func executeInContext(localStore: LocalDataStore) {
32         
33         guard let kdockId = parameter["api_kdock_id"].int else {
34             
35             return Logger.shared.log("api_kdock_id is wrong")
36         }
37         
38         let store = ServerDataStore.default
39         guard let kenzoDock = store.sync(execute: { store.kenzoDock(by: kdockId) }) else {
40             
41             return Logger.shared.log("KenzoDock is not found")
42         }
43         let kenzoDockInfo = store.sync {
44             KenzoDockInfo(dockId: kenzoDock.id,
45                           shipId: kenzoDock.created_ship_id,
46                           fuel: kenzoDock.item1,
47                           bull: kenzoDock.item2,
48                           steel: kenzoDock.item3,
49                           bauxite: kenzoDock.item4,
50                           kaihatusizai: kenzoDock.item5)
51         }
52         guard let flagShip = store.sync(execute: { store.masterShip(by: kenzoDock.created_ship_id) }) else {
53             
54             return Logger.shared.log("MasterShip is not found")
55         }
56         
57         guard let new = localStore.createKenzoHistory() else {
58             
59             return Logger.shared.log("Can not create KenzoHistory")
60         }
61         
62         new.name = store.sync { flagShip.name }
63         new.sTypeId = store.sync { flagShip.stype.id }
64         new.fuel = kenzoDockInfo.fuel
65         new.bull = kenzoDockInfo.bull
66         new.steel = kenzoDockInfo.steel
67         new.bauxite = kenzoDockInfo.bauxite
68         new.kaihatusizai = kenzoDockInfo.kaihatusizai
69         new.date = Date()
70         (new.flagShipLv, new.flagShipName, new.commanderLv) = markedValues(docInfo: kenzoDockInfo, in: localStore)
71     }
72     
73     private func markedValues(docInfo: KenzoDockInfo, in store: LocalDataStore) -> (Int, String, Int) {
74         
75         if let kenzoMark = store.kenzoMark(docInfo: docInfo) {
76             
77             return (kenzoMark.flagShipLv, kenzoMark.flagShipName, kenzoMark.commanderLv)
78         }
79         
80         return (-1, "", -1)
81     }
82 }