type DateTransformation {
    transformation: String
    args: [String]
    kwargs: JSONObject
}

type ShopTransformation {
    start: [DateTransformation]
    end: [DateTransformation]
}

interface Market {
    name: String
    timezone: String
}

type NordPoolMarket implements Market {
    name: String
    timezone: String
    maxPrice: Float
    minPrice: Float
    priceSteps: Int
    priceUnit: String
    tickSize: Float
    timeUnit: String
    tradeLot: Float
}

type RKOMMarket implements Market {
    name: String
    timezone: String
    startOfWeek: Int
}


interface Bid {
    name: String
    date: Date
    market: Market
}

type BenchmarkBid implements Bid {
    name: String
    date: Date
    market: Market
}

type DayAheadBid implements Bid{
    name: String
    date: Date
    market: Market
    isDefaultConfigForPriceArea: Boolean
    mainScenario: String
    priceArea: String
    priceScenarios: [JSONObject]
    shop: ShopTransformation
    noShop: Boolean
    bidProcessConfigurationName: String
    bidMatrixGeneratorConfigExternalId: String
}

type PriceScenario{
    name: String
    timeSeries: TimeSeries
    transformations: [ValueTransformation]
}

type ReserveScenario{
    volumes: [Int]
    auction: String
    product: String
    block: String
    reserveGroup: String
    mipPlant: [TimeSeries]
    obligation: TimeSeries
}

type RKOMBid implements Bid {
    name: String
    date: Date
    market: Market
    auction: String
    block: String
    method: String
    minimumPrice: Float
    pricePremium: Float
    priceScenarios: [PriceScenario]
    product: String
    reserveScenarios: [ReserveScenario]
    watercourse: String
}


interface Process {
    name: String
}

type BidMatrixGenerator {
    shopPlant: String
    methods: String
    functionExternalId: String
}

type DayAheadProcess implements Process{
    name: String
    bid: DayAheadBid
    shop: ShopTransformation
    incrementalMapping: [InputTimeSeriesMapping]
    bidMatrixGeneratorConfig: BidMatrixGenerator
}

type ProductionPlanTimeSeries {
    name: String
    series: [TimeSeries]
}

type Benchmarking implements Process{
    name: String
    productionPlanTimeSeries: [ProductionPlanTimeSeries]
    metrics: JSONObject
    bid: BenchmarkBid
    shop: ShopTransformation
    runEvents: [String]
}

type RKOMProcess implements Process{
    name: String
    bid: RKOMBid
    shop: ShopTransformation
    processEvents: [String]
    timezone: String
    plants: [String]
    incrementalMapping: [InputTimeSeriesMapping]
}

type RKOMCombinationBid{
    name: String
    auction: String
    rkomBigConfigs: [String]
}

type RKOMBidCombination {
    name: String
    auction: String
    bid: RKOMCombinationBid
}
