# This file was generated by liblab | https://liblab.com/

from __future__ import annotations
from typing import List
from .utils.json_map import JsonMap
from .base import BaseModel
from .straight_bet_v4 import StraightBetV4
from .parlay_bet import ParlayBet
from .teaser_bet import TeaserBet
from .special_bet import SpecialBet
from .manual_bet import ManualBet


@JsonMap(
    {
        "more_available": "moreAvailable",
        "page_size": "pageSize",
        "from_record": "fromRecord",
        "to_record": "toRecord",
        "straight_bets": "straightBets",
        "parlay_bets": "parlayBets",
        "teaser_bets": "teaserBets",
        "special_bets": "specialBets",
        "manual_bets": "manualBets",
    }
)
class GetBetsByTypeResponseV4(BaseModel):
    """GetBetsByTypeResponseV4

    :param more_available: Whether there are more pages available., defaults to None
    :type more_available: bool, optional
    :param page_size: Page size. Default is 1000., defaults to None
    :type page_size: int, optional
    :param from_record: Starting record number of the result set. Records start at zero, defaults to None
    :type from_record: int, optional
    :param to_record: Ending record number of the result set., defaults to None
    :type to_record: int, optional
    :param straight_bets: A collection of placed straight bets., defaults to None
    :type straight_bets: List[StraightBetV4], optional
    :param parlay_bets: A collection of placed parlay bets., defaults to None
    :type parlay_bets: List[ParlayBet], optional
    :param teaser_bets: A collection of placed teaser bets., defaults to None
    :type teaser_bets: List[TeaserBet], optional
    :param special_bets: A collection of placed special bets., defaults to None
    :type special_bets: List[SpecialBet], optional
    :param manual_bets: A collection of placed manual bets., defaults to None
    :type manual_bets: List[ManualBet], optional
    """

    def __init__(
        self,
        more_available: bool = None,
        page_size: int = None,
        from_record: int = None,
        to_record: int = None,
        straight_bets: List[StraightBetV4] = None,
        parlay_bets: List[ParlayBet] = None,
        teaser_bets: List[TeaserBet] = None,
        special_bets: List[SpecialBet] = None,
        manual_bets: List[ManualBet] = None,
    ):
        if more_available is not None:
            self.more_available = more_available
        if page_size is not None:
            self.page_size = page_size
        if from_record is not None:
            self.from_record = from_record
        if to_record is not None:
            self.to_record = to_record
        if straight_bets is not None:
            self.straight_bets = self._define_list(straight_bets, StraightBetV4)
        if parlay_bets is not None:
            self.parlay_bets = self._define_list(parlay_bets, ParlayBet)
        if teaser_bets is not None:
            self.teaser_bets = self._define_list(teaser_bets, TeaserBet)
        if special_bets is not None:
            self.special_bets = self._define_list(special_bets, SpecialBet)
        if manual_bets is not None:
            self.manual_bets = self._define_list(manual_bets, ManualBet)
