/*
Copyright (C) 2025 filifa

This file is part of mlbstats.

mlbstats is free software: you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free Software
Foundation, either version 3 of the License, or (at your option) any later
version.

mlbstats is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with
mlbstats. If not, see <https://www.gnu.org/licenses/>.
*/

/*
 * Stats API Documentation
 *
 * Official API for Major League Baseball.
 *
 * API version: 2.0.0
 * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git)
 */
package models

import (
	"time"
)

type BaseballPlay struct {
	RequestingUserRole           *Role                    `json:"requestingUserRole,omitempty"`
	Balls                        int32                    `json:"balls,omitempty"`
	Strikes                      int32                    `json:"strikes,omitempty"`
	Outs                         int32                    `json:"outs,omitempty"`
	Inning                       int32                    `json:"inning,omitempty"`
	AtBatIndex                   int32                    `json:"atBatIndex,omitempty"`
	HalfInning                   string                   `json:"halfInning,omitempty"`
	HasOut                       bool                     `json:"hasOut,omitempty"`
	Batter                       *BaseballPerson          `json:"batter,omitempty"`
	Pitcher                      *BaseballPerson          `json:"pitcher,omitempty"`
	StartTime                    time.Time                `json:"startTime,omitempty"`
	EndTime                      time.Time                `json:"endTime,omitempty"`
	BatterHotColdZoneStats       *Stats                   `json:"batterHotColdZoneStats,omitempty"`
	PitcherHotColdZoneStats      *Stats                   `json:"pitcherHotColdZoneStats,omitempty"`
	BatterHotColdZones           []BaseballHotColdZone    `json:"batterHotColdZones,omitempty"`
	PitcherHotColdZones          []BaseballHotColdZone    `json:"pitcherHotColdZones,omitempty"`
	SplitsBatter                 string                   `json:"splitsBatter,omitempty"`
	SplitsPitcher                string                   `json:"splitsPitcher,omitempty"`
	SplitsMenOnBase              string                   `json:"splitsMenOnBase,omitempty"`
	PitchHand                    *DynamicLookupEnum       `json:"pitchHand,omitempty"`
	BatSide                      *DynamicLookupEnum       `json:"batSide,omitempty"`
	CaptivatingIndex             int32                    `json:"captivatingIndex,omitempty"`
	HitTrajectory                *HitTrajectory           `json:"hitTrajectory,omitempty"`
	EventType                    string                   `json:"eventType,omitempty"`
	EventTypeEnum                *EventType               `json:"eventTypeEnum,omitempty"`
	Result                       string                   `json:"result,omitempty"`
	ResultMap                    map[string]string        `json:"resultMap,omitempty"`
	Description                  string                   `json:"description,omitempty"`
	NumRbi                       int32                    `json:"numRbi,omitempty"`
	AwayScore                    int32                    `json:"awayScore,omitempty"`
	HomeScore                    int32                    `json:"homeScore,omitempty"`
	IsComplete                   bool                     `json:"isComplete,omitempty"`
	IsScoringPlay                bool                     `json:"isScoringPlay,omitempty"`
	HasReview                    bool                     `json:"hasReview,omitempty"`
	ReviewType                   string                   `json:"reviewType,omitempty"`
	ReviewOverturned             bool                     `json:"reviewOverturned,omitempty"`
	ReviewInProgress             bool                     `json:"reviewInProgress,omitempty"`
	ChallengeTeamId              int32                    `json:"challengeTeamId,omitempty"`
	Reviews                      []BaseballReview         `json:"reviews,omitempty"`
	RunnerOn1b                   *BaseballPerson          `json:"runnerOn1b,omitempty"`
	RunnerOn2b                   *BaseballPerson          `json:"runnerOn2b,omitempty"`
	RunnerOn3b                   *BaseballPerson          `json:"runnerOn3b,omitempty"`
	PitchIndex                   []int32                  `json:"pitchIndex,omitempty"`
	ActionIndex                  []int32                  `json:"actionIndex,omitempty"`
	RunnerIndex                  []interface{}            `json:"runnerIndex,omitempty"`
	RunnerMovements              []BaseballRunnerMovement `json:"runnerMovements,omitempty"`
	PlayEvents                   []BaseballPlayEvent      `json:"playEvents,omitempty"`
	Credits                      []PlayCredit             `json:"credits,omitempty"`
	Flags                        []PlayCredit             `json:"flags,omitempty"`
	IsDoublePlay                 bool                     `json:"isDoublePlay,omitempty"`
	IsGroundIntoDoublePlay       bool                     `json:"isGroundIntoDoublePlay,omitempty"`
	IsTriplePlay                 bool                     `json:"isTriplePlay,omitempty"`
	IsGroundIntoTriplePlay       bool                     `json:"isGroundIntoTriplePlay,omitempty"`
	NumLeftOnBase                int32                    `json:"numLeftOnBase,omitempty"`
	NumLeftOnBaseScoring         int32                    `json:"numLeftOnBaseScoring,omitempty"`
	OffensiveAlignmentId         string                   `json:"offensiveAlignmentId,omitempty"`
	DefensiveAlignmentId         string                   `json:"defensiveAlignmentId,omitempty"`
	Complete                     bool                     `json:"complete,omitempty"`
	ScoringPlay                  bool                     `json:"scoringPlay,omitempty"`
	TopInning                    bool                     `json:"topInning,omitempty"`
	Results                      map[string]string        `json:"results,omitempty"`
	Descriptions                 map[string]string        `json:"descriptions,omitempty"`
	PlateAppearance              bool                     `json:"plateAppearance,omitempty"`
	Summary                      *BaseballPlay            `json:"summary,omitempty"`
	BatterResultEvent            *EventType               `json:"batterResultEvent,omitempty"`
	ResponsibleBatter            *BaseballPerson          `json:"responsibleBatter,omitempty"`
	PayoffEvent                  *BaseballPlayEvent       `json:"payoffEvent,omitempty"`
	TeamNumLeftOnBase            int32                    `json:"teamNumLeftOnBase,omitempty"`
	NumLeftOnBaseScoringPosition int32                    `json:"numLeftOnBaseScoringPosition,omitempty"`
	Hit                          bool                     `json:"hit,omitempty"`
	AtBat                        bool                     `json:"atBat,omitempty"`
	DoublePlay                   bool                     `json:"doublePlay,omitempty"`
	TriplePlay                   bool                     `json:"triplePlay,omitempty"`
	GroundIntoDoublePlay         bool                     `json:"groundIntoDoublePlay,omitempty"`
	GroundIntoTriplePlay         bool                     `json:"groundIntoTriplePlay,omitempty"`
	GroundOut                    bool                     `json:"groundOut,omitempty"`
	ResponsiblePitcher           *BaseballPerson          `json:"responsiblePitcher,omitempty"`
	InPlayEvent                  *BaseballPlayEvent       `json:"inPlayEvent,omitempty"`
	NumErrors                    int32                    `json:"numErrors,omitempty"`
	NumRuns                      int32                    `json:"numRuns,omitempty"`
	UserPrivileges               []Privilege              `json:"userPrivileges,omitempty"`
}
