summaryrefslogtreecommitdiff
blob: 1e8365a01e5ee2a41b06703092cc6336da764bec (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
module Struct.Player exposing
   (
      Type,
      get_id,
      set_id,
      get_query_url,
      set_query_url,
      get_username,
      set_username,
      get_campaigns,
      get_invasions,
      get_events,
      set_battles,
      has_active_battles,
      decoder,
      encode,
      default
   )

-- Elm -------------------------------------------------------------------------
import Json.Decode
import Json.Decode.Pipeline
import Json.Encode

-- Extension -------------------------------------------------------------------
import Struct.BattleSummary

--------------------------------------------------------------------------------
-- TYPES -----------------------------------------------------------------------
--------------------------------------------------------------------------------
type alias Type =
   {
      id : String,
      name : String,
      query_url : String,
      campaigns : (List Struct.BattleSummary.Type),
      invasions : (List Struct.BattleSummary.Type),
      events : (List Struct.BattleSummary.Type)
   }

--------------------------------------------------------------------------------
-- LOCAL -----------------------------------------------------------------------
--------------------------------------------------------------------------------

--------------------------------------------------------------------------------
-- EXPORTED --------------------------------------------------------------------
--------------------------------------------------------------------------------
get_id : Type -> String
get_id t = t.id

set_id : String -> Type -> Type
set_id str t = {t | id = str}

get_username : Type -> String
get_username t = t.name

set_username : String -> Type -> Type
set_username str t = {t | name = str}

get_query_url : Type -> String
get_query_url t = t.query_url

set_query_url : String -> Type -> Type
set_query_url str t = {t | query_url = str}

get_campaigns : Type -> (List Struct.BattleSummary.Type)
get_campaigns t = t.campaigns

get_invasions : Type -> (List Struct.BattleSummary.Type)
get_invasions t = t.invasions

get_events : Type -> (List Struct.BattleSummary.Type)
get_events t = t.events

set_battles : (
      (List Struct.BattleSummary.Type) ->
      (List Struct.BattleSummary.Type) ->
      (List Struct.BattleSummary.Type) ->
      Type ->
      Type
   )
set_battles campaigns invasions events t =
   {t |
      campaigns =
         (List.filter (Struct.BattleSummary.is_players_turn) campaigns),
      invasions =
         (List.filter (Struct.BattleSummary.is_players_turn) invasions),
      events = (List.filter (Struct.BattleSummary.is_players_turn) events)
   }

has_active_battles : Type -> Bool
has_active_battles t =
   (
      (
         (List.length t.campaigns)
         + (List.length t.invasions)
         + (List.length t.events)
      )
      > 0
   )

decoder : (Json.Decode.Decoder Type)
decoder =
   (Json.Decode.Pipeline.decode
      Type
      |> (Json.Decode.Pipeline.required "id" Json.Decode.string)
      |> (Json.Decode.Pipeline.required "name" Json.Decode.string)
      |> (Json.Decode.Pipeline.required "query_url" Json.Decode.string)
      |> (Json.Decode.Pipeline.hardcoded [])
      |> (Json.Decode.Pipeline.hardcoded [])
      |> (Json.Decode.Pipeline.hardcoded [])
   )

encode : Type -> Json.Encode.Value
encode t =
   (Json.Encode.object
      [
         ("id", (Json.Encode.string t.id)),
         ("name", (Json.Encode.string t.name)),
         ("query_url", (Json.Encode.string t.query_url))
      ]
   )

default : Type
default =
   {
      id = "0",
      name = "Username",
      query_url = "http://127.0.0.1/",
      campaigns = [],
      invasions = [],
      events = []
   }