{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE DeriveDataTypeable #-}
module Text.HTML5.MetaData.Schema.Product where

--  Valid: 2016-02-03 (Schema.rdfs.org)

import Text.HTML5.MetaData.Class
import Text.HTML5.MetaData.Type
import Data.Text
import Data.Typeable
import {-# SOURCE #-} qualified Text.HTML5.MetaData.Schema.Thing
import {-# SOURCE #-} qualified Text.HTML5.MetaData.Schema.IndividualProduct
import {-# SOURCE #-} qualified Text.HTML5.MetaData.Schema.ProductModel
import {-# SOURCE #-} qualified Text.HTML5.MetaData.Schema.SomeProducts
import {-# SOURCE #-} qualified Text.HTML5.MetaData.Schema.Vehicle

-- | Any offered product or service. For example: a pair of shoes; a concert ticket; the rental of a car; a haircut; or an episode of a TV show streamed online.
--
--   [@id@] Product
--
--   [@label@] Product
--
--   [@comment@] Any offered product or service. For example: a pair of shoes; a concert ticket; the rental of a car; a haircut; or an episode of a TV show streamed online.
--
--   [@ancestors@] @'Thing'@
--
--   [@subtypes@] @'IndividualProduct','ProductModel','SomeProducts','Vehicle'@
--
--   [@supertypes@] @'Thing'@
--
--   [@url@] <http://schema.org/Product>
data Product = Product { additionalProperty :: AdditionalProperty
                       , aggregateRating :: AggregateRating
                       , audience :: Audience
                       , award :: Award
                       , brand :: Brand
                       , category :: Category
                       , color :: Color
                       , depth :: Depth
                       , gtin12 :: Gtin12
                       , gtin13 :: Gtin13
                       , gtin14 :: Gtin14
                       , gtin8 :: Gtin8
                       , height :: Height
                       , isAccessoryOrSparePartFor :: IsAccessoryOrSparePartFor
                       , isConsumableFor :: IsConsumableFor
                       , isRelatedTo :: IsRelatedTo
                       , isSimilarTo :: IsSimilarTo
                       , itemCondition :: ItemCondition
                       , logo :: Logo
                       , manufacturer :: Manufacturer
                       , model :: Model
                       , mpn :: Mpn
                       , offers :: Offers
                       , productID :: ProductID
                       , productionDate :: ProductionDate
                       , purchaseDate :: PurchaseDate
                       , releaseDate :: ReleaseDate
                       , review :: Review
                       , sku :: Sku
                       , weight :: Weight
                       , width :: Width
                       , additionalType :: AdditionalType
                       , alternateName :: AlternateName
                       , description :: Description
                       , image :: Image
                       , mainEntityOfPage :: MainEntityOfPage
                       , name :: Name
                       , potentialAction :: PotentialAction
                       , sameAs :: SameAs
                       , url :: Url
                       }
               deriving (Show, Read, Eq, Typeable)

instance MetaData Product where
  _label         = const "Product"
  _comment_plain = const "Any offered product or service. For example: a pair of shoes; a concert ticket; the rental of a car; a haircut; or an episode of a TV show streamed online."
  _comment       = const "Any offered product or service. For example: a pair of shoes; a concert ticket; the rental of a car; a haircut; or an episode of a TV show streamed online."
  _url           = const "http://schema.org/Product"
  _ancestors     = const [typeOf (undefined :: Text.HTML5.MetaData.Schema.Thing.Thing)]
  _subtypes      = const [typeOf (undefined :: Text.HTML5.MetaData.Schema.IndividualProduct.IndividualProduct)
                         ,typeOf (undefined :: Text.HTML5.MetaData.Schema.ProductModel.ProductModel)
                         ,typeOf (undefined :: Text.HTML5.MetaData.Schema.SomeProducts.SomeProducts)
                         ,typeOf (undefined :: Text.HTML5.MetaData.Schema.Vehicle.Vehicle)]
  _supertypes    = const [typeOf (undefined :: Text.HTML5.MetaData.Schema.Thing.Thing)]