module Rattletrap.Type.Attribute.Title where

import qualified Rattletrap.BitGet as BitGet
import qualified Rattletrap.BitPut as BitPut
import qualified Rattletrap.Schema as Schema
import qualified Rattletrap.Type.U32 as U32
import qualified Rattletrap.Utility.Json as Json

data Title = Title
  { Title -> Bool
unknown1 :: Bool,
    Title -> Bool
unknown2 :: Bool,
    Title -> U32
unknown3 :: U32.U32,
    Title -> U32
unknown4 :: U32.U32,
    Title -> U32
unknown5 :: U32.U32,
    Title -> U32
unknown6 :: U32.U32,
    Title -> U32
unknown7 :: U32.U32,
    Title -> Bool
unknown8 :: Bool
  }
  deriving (Title -> Title -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Title -> Title -> Bool
$c/= :: Title -> Title -> Bool
== :: Title -> Title -> Bool
$c== :: Title -> Title -> Bool
Eq, Int -> Title -> ShowS
[Title] -> ShowS
Title -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Title] -> ShowS
$cshowList :: [Title] -> ShowS
show :: Title -> String
$cshow :: Title -> String
showsPrec :: Int -> Title -> ShowS
$cshowsPrec :: Int -> Title -> ShowS
Show)

instance Json.FromJSON Title where
  parseJSON :: Value -> Parser Title
parseJSON = forall a. String -> (Object -> Parser a) -> Value -> Parser a
Json.withObject String
"Title" forall a b. (a -> b) -> a -> b
$ \Object
object -> do
    Bool
unknown1 <- forall value. FromJSON value => Object -> String -> Parser value
Json.required Object
object String
"unknown1"
    Bool
unknown2 <- forall value. FromJSON value => Object -> String -> Parser value
Json.required Object
object String
"unknown2"
    U32
unknown3 <- forall value. FromJSON value => Object -> String -> Parser value
Json.required Object
object String
"unknown3"
    U32
unknown4 <- forall value. FromJSON value => Object -> String -> Parser value
Json.required Object
object String
"unknown4"
    U32
unknown5 <- forall value. FromJSON value => Object -> String -> Parser value
Json.required Object
object String
"unknown5"
    U32
unknown6 <- forall value. FromJSON value => Object -> String -> Parser value
Json.required Object
object String
"unknown6"
    U32
unknown7 <- forall value. FromJSON value => Object -> String -> Parser value
Json.required Object
object String
"unknown7"
    Bool
unknown8 <- forall value. FromJSON value => Object -> String -> Parser value
Json.required Object
object String
"unknown8"
    forall (f :: * -> *) a. Applicative f => a -> f a
pure
      Title
        { Bool
unknown1 :: Bool
unknown1 :: Bool
unknown1,
          Bool
unknown2 :: Bool
unknown2 :: Bool
unknown2,
          U32
unknown3 :: U32
unknown3 :: U32
unknown3,
          U32
unknown4 :: U32
unknown4 :: U32
unknown4,
          U32
unknown5 :: U32
unknown5 :: U32
unknown5,
          U32
unknown6 :: U32
unknown6 :: U32
unknown6,
          U32
unknown7 :: U32
unknown7 :: U32
unknown7,
          Bool
unknown8 :: Bool
unknown8 :: Bool
unknown8
        }

instance Json.ToJSON Title where
  toJSON :: Title -> Value
toJSON Title
x =
    [(Key, Value)] -> Value
Json.object
      [ forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"unknown1" forall a b. (a -> b) -> a -> b
$ Title -> Bool
unknown1 Title
x,
        forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"unknown2" forall a b. (a -> b) -> a -> b
$ Title -> Bool
unknown2 Title
x,
        forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"unknown3" forall a b. (a -> b) -> a -> b
$ Title -> U32
unknown3 Title
x,
        forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"unknown4" forall a b. (a -> b) -> a -> b
$ Title -> U32
unknown4 Title
x,
        forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"unknown5" forall a b. (a -> b) -> a -> b
$ Title -> U32
unknown5 Title
x,
        forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"unknown6" forall a b. (a -> b) -> a -> b
$ Title -> U32
unknown6 Title
x,
        forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"unknown7" forall a b. (a -> b) -> a -> b
$ Title -> U32
unknown7 Title
x,
        forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"unknown8" forall a b. (a -> b) -> a -> b
$ Title -> Bool
unknown8 Title
x
      ]

schema :: Schema.Schema
schema :: Schema
schema =
  String -> Value -> Schema
Schema.named String
"attribute-title" forall a b. (a -> b) -> a -> b
$
    [((Key, Value), Bool)] -> Value
Schema.object
      [ (forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"unknown1" forall a b. (a -> b) -> a -> b
$ Schema -> Value
Schema.ref Schema
Schema.boolean, Bool
True),
        (forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"unknown2" forall a b. (a -> b) -> a -> b
$ Schema -> Value
Schema.ref Schema
Schema.boolean, Bool
True),
        (forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"unknown3" forall a b. (a -> b) -> a -> b
$ Schema -> Value
Schema.ref Schema
U32.schema, Bool
True),
        (forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"unknown4" forall a b. (a -> b) -> a -> b
$ Schema -> Value
Schema.ref Schema
U32.schema, Bool
True),
        (forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"unknown5" forall a b. (a -> b) -> a -> b
$ Schema -> Value
Schema.ref Schema
U32.schema, Bool
True),
        (forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"unknown6" forall a b. (a -> b) -> a -> b
$ Schema -> Value
Schema.ref Schema
U32.schema, Bool
True),
        (forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"unknown7" forall a b. (a -> b) -> a -> b
$ Schema -> Value
Schema.ref Schema
U32.schema, Bool
True),
        (forall value pair.
(ToJSON value, KeyValue pair) =>
String -> value -> pair
Json.pair String
"unknown8" forall a b. (a -> b) -> a -> b
$ Schema -> Value
Schema.ref Schema
Schema.boolean, Bool
True)
      ]

bitPut :: Title -> BitPut.BitPut
bitPut :: Title -> BitPut
bitPut Title
titleAttribute =
  Bool -> BitPut
BitPut.bool (Title -> Bool
unknown1 Title
titleAttribute)
    forall a. Semigroup a => a -> a -> a
<> Bool -> BitPut
BitPut.bool (Title -> Bool
unknown2 Title
titleAttribute)
    forall a. Semigroup a => a -> a -> a
<> U32 -> BitPut
U32.bitPut (Title -> U32
unknown3 Title
titleAttribute)
    forall a. Semigroup a => a -> a -> a
<> U32 -> BitPut
U32.bitPut (Title -> U32
unknown4 Title
titleAttribute)
    forall a. Semigroup a => a -> a -> a
<> U32 -> BitPut
U32.bitPut (Title -> U32
unknown5 Title
titleAttribute)
    forall a. Semigroup a => a -> a -> a
<> U32 -> BitPut
U32.bitPut (Title -> U32
unknown6 Title
titleAttribute)
    forall a. Semigroup a => a -> a -> a
<> U32 -> BitPut
U32.bitPut (Title -> U32
unknown7 Title
titleAttribute)
    forall a. Semigroup a => a -> a -> a
<> Bool -> BitPut
BitPut.bool (Title -> Bool
unknown8 Title
titleAttribute)

bitGet :: BitGet.BitGet Title
bitGet :: BitGet Title
bitGet = forall a. String -> BitGet a -> BitGet a
BitGet.label String
"Title" forall a b. (a -> b) -> a -> b
$ do
  Bool
unknown1 <- forall a. String -> BitGet a -> BitGet a
BitGet.label String
"unknown1" BitGet Bool
BitGet.bool
  Bool
unknown2 <- forall a. String -> BitGet a -> BitGet a
BitGet.label String
"unknown2" BitGet Bool
BitGet.bool
  U32
unknown3 <- forall a. String -> BitGet a -> BitGet a
BitGet.label String
"unknown3" BitGet U32
U32.bitGet
  U32
unknown4 <- forall a. String -> BitGet a -> BitGet a
BitGet.label String
"unknown4" BitGet U32
U32.bitGet
  U32
unknown5 <- forall a. String -> BitGet a -> BitGet a
BitGet.label String
"unknown5" BitGet U32
U32.bitGet
  U32
unknown6 <- forall a. String -> BitGet a -> BitGet a
BitGet.label String
"unknown6" BitGet U32
U32.bitGet
  U32
unknown7 <- forall a. String -> BitGet a -> BitGet a
BitGet.label String
"unknown7" BitGet U32
U32.bitGet
  Bool
unknown8 <- forall a. String -> BitGet a -> BitGet a
BitGet.label String
"unknown8" BitGet Bool
BitGet.bool
  forall (f :: * -> *) a. Applicative f => a -> f a
pure
    Title
      { Bool
unknown1 :: Bool
unknown1 :: Bool
unknown1,
        Bool
unknown2 :: Bool
unknown2 :: Bool
unknown2,
        U32
unknown3 :: U32
unknown3 :: U32
unknown3,
        U32
unknown4 :: U32
unknown4 :: U32
unknown4,
        U32
unknown5 :: U32
unknown5 :: U32
unknown5,
        U32
unknown6 :: U32
unknown6 :: U32
unknown6,
        U32
unknown7 :: U32
unknown7 :: U32
unknown7,
        Bool
unknown8 :: Bool
unknown8 :: Bool
unknown8
      }