package com.collective.analytics.schema

import org.apache.spark.sql.Row
import org.apache.spark.sql.types._

case class ImpressionLog(
  adId: String,
  siteId: String,
  cookieId: String,
  impressions: Long,
  clicks: Long,
  segments: Array[String]
)

object ImpressionLog { self =>

  val ad_id               = "ad_id"
  val site_id             = "site_id"
  val cookie_id           = "cookie_id"
  val impressions         = "impressions"
  val clicks              = "clicks"
  val segments            = "segments"

  object Schema extends SchemaDefinition {
    val ad_id        = structField(self.ad_id,       StringType)
    val site_id      = structField(self.site_id,     StringType)
    val cookie_id    = structField(self.cookie_id,   StringType)
    val impressions  = structField(self.impressions, LongType)
    val clicks       = structField(self.clicks,      LongType)
    val segments     = structField(self.segments,    ArrayType(StringType))
  }

  val schema: StructType = StructType(Schema.fields)

  import RowSyntax._

  def parse(row: Row): ImpressionLog = ImpressionLog(
    row.read[StringColumn](0),
    row.read[StringColumn](1),
    row.read[StringColumn](2),
    row.read[LongColumn](3),
    row.read[LongColumn](4),
    row.read[StringArrayColumn](5)
  )

}