definitions:
  domain.AleaPlayCallback:
    properties:
      amount:
        type: number
      currency:
        type: string
      event_id:
        type: string
      game_id:
        type: string
      is_free_round:
        type: boolean
      multiplier:
        type: number
      operator_id:
        type: string
      round_id:
        type: string
      session_id:
        type: string
      signature:
        type: string
      timestamp:
        type: integer
      transaction_id:
        type: string
      type:
        description: BET, WIN, CASHOUT, etc.
        type: string
      user_id:
        type: string
    type: object
  domain.BetOutcome:
    properties:
      away_team_name:
        example: Liverpool
        type: string
      bet_id:
        example: 1
        type: integer
      event_id:
        example: 1
        type: integer
      expires:
        example: "2025-04-08T12:00:00Z"
        type: string
      home_team_name:
        example: Manchester
        type: string
      id:
        example: 1
        type: integer
      market_id:
        example: 1
        type: integer
      market_name:
        example: Fulltime Result
        type: string
      odd:
        example: 1.5
        type: number
      odd_handicap:
        example: "1"
        type: string
      odd_header:
        example: "1"
        type: string
      odd_id:
        example: 1
        type: integer
      odd_name:
        example: "1"
        type: string
      sport_id:
        example: 1
        type: integer
      status:
        allOf:
        - $ref: '#/definitions/domain.OutcomeStatus'
        example: 1
    type: object
  domain.BetRes:
    properties:
      amount:
        example: 100
        type: number
      branch_id:
        example: 2
        type: integer
      cashed_id:
        example: "21234"
        type: string
      cashed_out:
        example: false
        type: boolean
      created_at:
        example: "2025-04-08T12:00:00Z"
        type: string
      full_name:
        example: John
        type: string
      id:
        example: 1
        type: integer
      is_shop_bet:
        example: false
        type: boolean
      outcomes:
        items:
          $ref: '#/definitions/domain.BetOutcome'
        type: array
      phone_number:
        example: "1234567890"
        type: string
      status:
        allOf:
        - $ref: '#/definitions/domain.OutcomeStatus'
        example: 1
      total_odds:
        example: 4.22
        type: number
      user_id:
        example: 2
        type: integer
    type: object
  domain.ChapaDepositRequestPayload:
    properties:
      amount:
        type: number
    required:
    - amount
    type: object
  domain.ChapaDepositResponse:
    properties:
      checkoutURL:
        type: string
      reference:
        type: string
    type: object
  domain.ChapaVerificationResponse:
    properties:
      amount:
        type: number
      currency:
        type: string
      status:
        type: string
      tx_ref:
        type: string
    type: object
  domain.ChapaWebhookPayload:
    properties:
      amount:
        type: integer
      currency:
        type: string
      status:
        $ref: '#/definitions/domain.PaymentStatus'
      tx_ref:
        type: string
    type: object
  domain.ChapaWithdrawalRequest:
    properties:
      account_name:
        type: string
      account_number:
        type: string
      amount:
        description: string because Chapa API uses string for monetary values
        type: string
      bank_code:
        type: integer
      currency:
        type: string
      reference:
        type: string
    type: object
  domain.CreateBetOutcomeReq:
    properties:
      event_id:
        example: 1
        type: integer
      market_id:
        example: 1
        type: integer
      odd_id:
        example: 1
        type: integer
    type: object
  domain.CreateBetReq:
    properties:
      amount:
        example: 100
        type: number
      branch_id:
        example: 1
        type: integer
      full_name:
        example: John
        type: string
      outcomes:
        items:
          $ref: '#/definitions/domain.CreateBetOutcomeReq'
        type: array
      phone_number:
        example: "1234567890"
        type: string
      status:
        allOf:
        - $ref: '#/definitions/domain.OutcomeStatus'
        example: 1
    type: object
  domain.DashboardSummary:
    properties:
      active_admins:
        type: integer
      active_bets:
        type: integer
      active_branches:
        type: integer
      active_cashiers:
        type: integer
      active_companies:
        type: integer
      active_customers:
        type: integer
      active_games:
        type: integer
      active_managers:
        type: integer
      average_stake:
        type: integer
      branches_count:
        type: integer
      customer_count:
        type: integer
      inactive_admins:
        type: integer
      inactive_branches:
        type: integer
      inactive_cashiers:
        type: integer
      inactive_companies:
        type: integer
      inactive_customers:
        type: integer
      inactive_games:
        type: integer
      inactive_managers:
        type: integer
      profit:
        type: integer
      read_notifications:
        type: integer
      total_admins:
        type: integer
      total_bets:
        type: integer
      total_cashiers:
        type: integer
      total_companies:
        type: integer
      total_deposits:
        type: integer
      total_games:
        type: integer
      total_losses:
        type: integer
      total_managers:
        type: integer
      total_notifications:
        type: integer
      total_stakes:
        type: integer
      total_wallets:
        type: integer
      total_wins:
        type: integer
      total_withdrawals:
        type: integer
      unread_notifications:
        type: integer
      win_balance:
        type: integer
      win_rate:
        type: number
    type: object
  domain.ErrorResponse:
    properties:
      error:
        type: string
      message:
        type: string
    type: object
  domain.EventStatus:
    enum:
    - upcoming
    - in_play
    - to_be_fixed
    - ended
    - postponed
    - cancelled
    - walkover
    - interrupted
    - abandoned
    - retired
    - suspended
    - decided_by_fa
    - removed
    type: string
    x-enum-varnames:
    - STATUS_PENDING
    - STATUS_IN_PLAY
    - STATUS_TO_BE_FIXED
    - STATUS_ENDED
    - STATUS_POSTPONED
    - STATUS_CANCELLED
    - STATUS_WALKOVER
    - STATUS_INTERRUPTED
    - STATUS_ABANDONED
    - STATUS_RETIRED
    - STATUS_SUSPENDED
    - STATUS_DECIDED_BY_FA
    - STATUS_REMOVED
  domain.League:
    properties:
      bet365_id:
        example: 1121
        type: integer
      cc:
        example: uk
        type: string
      id:
        example: 1
        type: integer
      is_active:
        example: false
        type: boolean
      name:
        example: BPL
        type: string
      sport_id:
        example: 1
        type: integer
    type: object
  domain.Odd:
    properties:
      category:
        type: string
      event_id:
        type: string
      fetched_at:
        type: string
      fi:
        type: string
      handicap:
        type: string
      is_active:
        type: boolean
      market_category:
        type: string
      market_id:
        type: string
      market_name:
        type: string
      market_type:
        type: string
      name:
        type: string
      odds_value:
        type: number
      raw_odds:
        items: {}
        type: array
      section:
        type: string
      source:
        type: string
    type: object
  domain.OutcomeStatus:
    enum:
    - 0
    - 1
    - 2
    - 3
    - 4
    - 5
    type: integer
    x-enum-comments:
      OUTCOME_STATUS_ERROR: Half Win and Half Given Back
      OUTCOME_STATUS_HALF: Half Win and Half Given Back
      OUTCOME_STATUS_VOID: Give Back
    x-enum-varnames:
    - OUTCOME_STATUS_PENDING
    - OUTCOME_STATUS_WIN
    - OUTCOME_STATUS_LOSS
    - OUTCOME_STATUS_VOID
    - OUTCOME_STATUS_HALF
    - OUTCOME_STATUS_ERROR
  domain.PaymentOption:
    enum:
    - 0
    - 1
    - 2
    - 3
    type: integer
    x-enum-varnames:
    - CASH_TRANSACTION
    - TELEBIRR_TRANSACTION
    - ARIFPAY_TRANSACTION
    - BANK
  domain.PaymentStatus:
    enum:
    - pending
    - completed
    - failed
    type: string
    x-enum-varnames:
    - PaymentStatusPending
    - PaymentStatusCompleted
    - PaymentStatusFailed
  domain.PopOKCallback:
    properties:
      amount:
        type: number
      currency:
        type: string
      session_id:
        type: string
      signature:
        description: HMAC-SHA256 signature for verification
        type: string
      timestamp:
        type: integer
      transaction_id:
        type: string
      type:
        description: BET, WIN, REFUND, JACKPOT_WIN
        type: string
    type: object
  domain.RandomBetReq:
    properties:
      branch_id:
        example: 1
        type: integer
      number_of_bets:
        example: 1
        type: integer
    required:
    - branch_id
    - number_of_bets
    type: object
  domain.RawOddsByMarketID:
    properties:
      fetched_at:
        type: string
      handicap:
        type: string
      id:
        type: integer
      market_name:
        type: string
      raw_odds:
        items: {}
        type: array
    type: object
  domain.RecommendationErrorResponse:
    properties:
      message:
        type: string
    type: object
  domain.RecommendationSuccessfulResponse:
    properties:
      message:
        type: string
      recommended_games:
        items:
          $ref: '#/definitions/domain.VirtualGame'
        type: array
    type: object
  domain.ReferralSettings:
    properties:
      betReferralBonusPercentage:
        type: number
      cashbackPercentage:
        type: number
      createdAt:
        type: string
      expiresAfterDays:
        type: integer
      id:
        type: integer
      maxReferrals:
        type: integer
      referralRewardAmount:
        type: number
      updatedAt:
        type: string
      updatedBy:
        type: string
      version:
        type: integer
    type: object
  domain.ReferralStats:
    properties:
      completedReferrals:
        type: integer
      pendingRewards:
        type: number
      totalReferrals:
        type: integer
      totalRewardEarned:
        type: number
    type: object
  domain.Response:
    properties:
      data: {}
      message:
        type: string
      status_code:
        type: integer
      success:
        type: boolean
    type: object
  domain.Role:
    enum:
    - super_admin
    - admin
    - branch_manager
    - customer
    - cashier
    type: string
    x-enum-varnames:
    - RoleSuperAdmin
    - RoleAdmin
    - RoleBranchManager
    - RoleCustomer
    - RoleCashier
  domain.TicketOutcome:
    properties:
      away_team_name:
        example: Liverpool
        type: string
      event_id:
        example: 1
        type: integer
      expires:
        example: "2025-04-08T12:00:00Z"
        type: string
      home_team_name:
        example: Manchester
        type: string
      id:
        example: 1
        type: integer
      market_id:
        example: 1
        type: integer
      market_name:
        example: Fulltime Result
        type: string
      odd:
        example: 1.5
        type: number
      odd_handicap:
        example: "1"
        type: string
      odd_header:
        example: "1"
        type: string
      odd_id:
        example: 1
        type: integer
      odd_name:
        example: "1"
        type: string
      status:
        allOf:
        - $ref: '#/definitions/domain.OutcomeStatus'
        example: 1
      ticket_id:
        example: 1
        type: integer
    type: object
  domain.UpcomingEvent:
    properties:
      away_kit_image:
        description: Kit or image for away team (optional)
        type: string
      away_team:
        description: Away team name (can be empty/null)
        type: string
      away_team_id:
        description: Away team ID (can be empty/null)
        type: integer
      home_kit_image:
        description: Kit or image for home team (optional)
        type: string
      home_team:
        description: Home team name (if available)
        type: string
      home_team_id:
        description: Home team ID
        type: integer
      id:
        description: Event ID
        type: string
      league_cc:
        description: League country code
        type: string
      league_id:
        description: League ID
        type: integer
      league_name:
        description: League name
        type: string
      match_name:
        description: Match or event name
        type: string
      source:
        description: bet api provider (bet365, betfair)
        type: string
      sport_id:
        description: Sport ID
        type: integer
      start_time:
        description: Converted from "time" field in UNIX format
        type: string
      status:
        allOf:
        - $ref: '#/definitions/domain.EventStatus'
        description: Match Status for event
    type: object
  domain.VeliCallback:
    properties:
      amount:
        description: Transaction amount
        type: number
      currency:
        description: e.g., "USD"
        type: string
      event_type:
        description: '"bet_placed", "game_result", etc.'
        type: string
      game_id:
        description: e.g., "veli_aviator_v1"
        type: string
      multiplier:
        description: For games with multipliers (Aviator/Plinko)
        type: number
      round_id:
        description: Unique round identifier (replaces transaction_id)
        type: string
      session_id:
        description: Matches VirtualGameSession.SessionToken
        type: string
      signature:
        description: HMAC-SHA256
        type: string
      timestamp:
        description: Unix timestamp
        type: integer
      user_id:
        description: Veli's user identifier
        type: string
    type: object
  domain.VirtualGame:
    properties:
      category:
        type: string
      created_at:
        type: string
      id:
        type: integer
      is_active:
        type: boolean
      is_featured:
        type: boolean
      max_bet:
        type: number
      min_bet:
        type: number
      name:
        type: string
      popularity_score:
        type: integer
      provider:
        type: string
      rtp:
        type: number
      thumbnail_url:
        type: string
      updated_at:
        type: string
      volatility:
        type: string
    type: object
  handlers.AdminRes:
    properties:
      created_at:
        type: string
      email:
        type: string
      email_verified:
        type: boolean
      first_name:
        type: string
      id:
        type: integer
      last_login:
        type: string
      last_name:
        type: string
      phone_number:
        type: string
      phone_verified:
        type: boolean
      role:
        $ref: '#/definitions/domain.Role'
      suspended:
        type: boolean
      suspended_at:
        type: string
      updated_at:
        type: string
    type: object
  handlers.BranchDetailRes:
    properties:
      balance:
        example: 100.5
        type: number
      branch_manager_id:
        example: 1
        type: integer
      company_id:
        example: 1
        type: integer
      id:
        example: 1
        type: integer
      is_self_owned:
        example: false
        type: boolean
      location:
        example: Addis Ababa
        type: string
      manager_name:
        example: John Smith
        type: string
      manager_phone_number:
        example: "0911111111"
        type: string
      name:
        example: 4-kilo Branch
        type: string
      wallet_id:
        example: 1
        type: integer
    type: object
  handlers.BranchOperationRes:
    properties:
      description:
        example: Betting on sport events
        type: string
      name:
        example: SportsBook
        type: string
    type: object
  handlers.BranchRes:
    properties:
      branch_manager_id:
        example: 1
        type: integer
      company_id:
        example: 1
        type: integer
      id:
        example: 1
        type: integer
      is_self_owned:
        example: false
        type: boolean
      location:
        example: Addis Ababa
        type: string
      name:
        example: 4-kilo Branch
        type: string
      wallet_id:
        example: 1
        type: integer
    type: object
  handlers.CheckPhoneEmailExistReq:
    properties:
      email:
        example: john.doe@example.com
        type: string
      phone_number:
        example: "1234567890"
        type: string
    type: object
  handlers.CheckPhoneEmailExistRes:
    properties:
      email_exist:
        type: boolean
      phone_number_exist:
        type: boolean
    type: object
  handlers.CompanyRes:
    properties:
      admin_id:
        example: 1
        type: integer
      id:
        example: 1
        type: integer
      name:
        example: CompanyName
        type: string
      wallet_id:
        example: 1
        type: integer
    type: object
  handlers.CreateAdminReq:
    properties:
      company_id:
        example: 1
        type: integer
      email:
        example: john.doe@example.com
        type: string
      first_name:
        example: John
        type: string
      last_name:
        example: Doe
        type: string
      password:
        example: password123
        type: string
      phone_number:
        example: "1234567890"
        type: string
    type: object
  handlers.CreateBranchOperationReq:
    properties:
      branch_id:
        example: 1
        type: integer
      operation_id:
        example: 1
        type: integer
    type: object
  handlers.CreateBranchReq:
    properties:
      branch_manager_id:
        example: 1
        type: integer
      company_id:
        example: 1
        type: integer
      is_self_owned:
        example: false
        type: boolean
      location:
        example: Addis Ababa
        maxLength: 100
        minLength: 3
        type: string
      name:
        example: 4-kilo Branch
        maxLength: 100
        minLength: 3
        type: string
      operations:
        items:
          type: integer
        type: array
    required:
    - branch_manager_id
    - location
    - name
    - operations
    type: object
  handlers.CreateCashierReq:
    properties:
      branch_id:
        example: 1
        type: integer
      email:
        example: john.doe@example.com
        type: string
      first_name:
        example: John
        type: string
      last_name:
        example: Doe
        type: string
      password:
        example: password123
        type: string
      phone_number:
        example: "1234567890"
        type: string
      suspended:
        example: false
        type: boolean
    type: object
  handlers.CreateCompanyReq:
    properties:
      admin_id:
        example: 1
        type: integer
      name:
        example: CompanyName
        type: string
    type: object
  handlers.CreateManagerReq:
    properties:
      company_id:
        example: 1
        type: integer
      email:
        example: john.doe@example.com
        type: string
      first_name:
        example: John
        type: string
      last_name:
        example: Doe
        type: string
      password:
        example: password123
        type: string
      phone_number:
        example: "1234567890"
        type: string
    type: object
  handlers.CreateSupportedOperationReq:
    properties:
      description:
        example: Betting on sport events
        type: string
      name:
        example: SportsBook
        type: string
    type: object
  handlers.CreateTicketOutcomeReq:
    properties:
      event_id:
        description: TicketID int64 `json:"ticket_id" example:"1"`
        example: 1
        type: integer
      market_id:
        example: 1
        type: integer
      odd_id:
        example: 1
        type: integer
    type: object
  handlers.CreateTicketReq:
    properties:
      amount:
        example: 100
        type: number
      outcomes:
        items:
          $ref: '#/definitions/handlers.CreateTicketOutcomeReq'
        type: array
    type: object
  handlers.CreateTicketRes:
    properties:
      created_number:
        example: 3
        type: integer
      fast_code:
        example: 1234
        type: integer
    type: object
  handlers.CreateTransactionReq:
    properties:
      account_name:
        type: string
      account_number:
        type: string
      amount:
        example: 100
        type: number
      bank_code:
        type: string
      beneficiary_name:
        type: string
      bet_id:
        example: 1
        type: integer
      branch_id:
        example: 1
        type: integer
      cashout_id:
        example: "191212"
        type: string
      full_name:
        example: John Smith
        type: string
      payment_option:
        allOf:
        - $ref: '#/definitions/domain.PaymentOption'
        example: 1
      phone_number:
        example: "0911111111"
        type: string
      reference_number:
        type: string
      type:
        example: 1
        type: integer
    type: object
  handlers.CreateTransferReq:
    properties:
      amount:
        example: 100
        type: number
      payment_method:
        example: cash
        type: string
    type: object
  handlers.CustomerWalletRes:
    properties:
      created_at:
        type: string
      customer_id:
        example: 1
        type: integer
      id:
        example: 1
        type: integer
      regular_balance:
        example: 100
        type: number
      regular_id:
        example: 1
        type: integer
      regular_updated_at:
        type: string
      static_balance:
        example: 100
        type: number
      static_id:
        example: 1
        type: integer
      static_updated_at:
        type: string
    type: object
  handlers.GetCashierRes:
    properties:
      branch_id:
        type: integer
      branch_location:
        type: string
      branch_name:
        type: string
      branch_wallet:
        type: integer
      created_at:
        type: string
      email:
        type: string
      email_verified:
        type: boolean
      first_name:
        type: string
      id:
        type: integer
      last_login:
        type: string
      last_name:
        type: string
      phone_number:
        type: string
      phone_verified:
        type: boolean
      role:
        $ref: '#/definitions/domain.Role'
      suspended:
        type: boolean
      suspended_at:
        type: string
      updated_at:
        type: string
    type: object
  handlers.ManagersRes:
    properties:
      created_at:
        type: string
      email:
        type: string
      email_verified:
        type: boolean
      first_name:
        type: string
      id:
        type: integer
      last_login:
        type: string
      last_name:
        type: string
      phone_number:
        type: string
      phone_verified:
        type: boolean
      role:
        $ref: '#/definitions/domain.Role'
      suspended:
        type: boolean
      suspended_at:
        type: string
      updated_at:
        type: string
    type: object
  handlers.RegisterCodeReq:
    properties:
      email:
        example: john.doe@example.com
        type: string
      phone_number:
        example: "1234567890"
        type: string
    type: object
  handlers.RegisterUserReq:
    properties:
      email:
        example: john.doe@example.com
        type: string
      first_name:
        example: John
        type: string
      last_name:
        example: Doe
        type: string
      otp:
        example: "123456"
        type: string
      password:
        example: password123
        type: string
      phone_number:
        example: "1234567890"
        type: string
      referal_code:
        example: ABC123
        type: string
    type: object
  handlers.ResetCodeReq:
    properties:
      email:
        example: john.doe@example.com
        type: string
      phone_number:
        example: "1234567890"
        type: string
    type: object
  handlers.ResetPasswordReq:
    properties:
      email:
        example: john.doe@example.com
        type: string
      otp:
        example: "123456"
        type: string
      password:
        example: newpassword123
        minLength: 8
        type: string
      phone_number:
        example: "1234567890"
        type: string
    required:
    - otp
    - password
    type: object
  handlers.ResultRes:
    properties:
      outcomes:
        items:
          $ref: '#/definitions/domain.BetOutcome'
        type: array
    type: object
  handlers.SearchUserByNameOrPhoneReq:
    properties:
      query:
        type: string
      role:
        $ref: '#/definitions/domain.Role'
    type: object
  handlers.SupportedOperationRes:
    properties:
      description:
        example: Betting on sport events
        type: string
      id:
        example: 1
        type: integer
      name:
        example: SportsBook
        type: string
    type: object
  handlers.TicketRes:
    properties:
      amount:
        example: 100
        type: number
      id:
        example: 1
        type: integer
      outcomes:
        items:
          $ref: '#/definitions/domain.TicketOutcome'
        type: array
      total_odds:
        example: 4.22
        type: number
    type: object
  handlers.TransactionRes:
    properties:
      account_name:
        type: string
      account_number:
        type: string
      amount:
        example: 100
        type: number
      approved_by:
        example: 1
        type: integer
      approver_name:
        example: John Smith
        type: string
      bank_code:
        type: string
      beneficiary_name:
        type: string
      bet_id:
        example: 1
        type: integer
      branch_id:
        example: 1
        type: integer
      branch_location:
        example: Branch Location
        type: string
      branch_name:
        example: Branch Name
        type: string
      cashier_id:
        example: 1
        type: integer
      cashier_name:
        example: John Smith
        type: string
      company_id:
        example: 1
        type: integer
      created_at:
        type: string
      full_name:
        example: John Smith
        type: string
      id:
        example: 1
        type: integer
      number_of_outcomes:
        example: 1
        type: integer
      payment_option:
        allOf:
        - $ref: '#/definitions/domain.PaymentOption'
        example: 1
      phone_number:
        example: "0911111111"
        type: string
      reference_number:
        type: string
      type:
        example: 1
        type: integer
      updated_at:
        type: string
      verified:
        example: true
        type: boolean
    type: object
  handlers.TransferWalletRes:
    properties:
      amount:
        example: 100
        type: number
      cashier_id:
        example: 789
        type: integer
      created_at:
        example: "2025-04-08T12:00:00Z"
        type: string
      id:
        example: 1
        type: integer
      payment_method:
        example: bank
        type: string
      receiver_wallet_id:
        example: 1
        type: integer
      sender_wallet_id:
        example: 1
        type: integer
      type:
        example: transfer
        type: string
      updated_at:
        example: "2025-04-08T12:30:00Z"
        type: string
      verified:
        example: true
        type: boolean
    type: object
  handlers.UpdateCashOutReq:
    properties:
      cashedOut:
        type: boolean
    type: object
  handlers.UpdateCompanyReq:
    properties:
      admin_id:
        example: 1
        type: integer
      name:
        example: CompanyName
        type: string
    type: object
  handlers.UpdateTransactionVerifiedReq:
    properties:
      verified:
        example: true
        type: boolean
    type: object
  handlers.UpdateUserSuspendReq:
    properties:
      suspended:
        example: true
        type: boolean
      user_id:
        example: 123
        type: integer
    required:
    - suspended
    - user_id
    type: object
  handlers.UpdateUserSuspendRes:
    properties:
      suspended:
        type: boolean
      user_id:
        type: integer
    type: object
  handlers.UpdateWalletActiveReq:
    properties:
      is_active:
        example: true
        type: boolean
    required:
    - is_active
    type: object
  handlers.UserProfileRes:
    properties:
      created_at:
        type: string
      email:
        type: string
      email_verified:
        type: boolean
      first_name:
        type: string
      id:
        type: integer
      last_login:
        type: string
      last_name:
        type: string
      phone_number:
        type: string
      phone_verified:
        type: boolean
      role:
        $ref: '#/definitions/domain.Role'
      suspended:
        type: boolean
      suspended_at:
        type: string
      updated_at:
        type: string
    type: object
  handlers.WalletRes:
    properties:
      amount:
        example: 100
        type: number
      created_at:
        type: string
      id:
        example: 1
        type: integer
      is_active:
        example: true
        type: boolean
      is_bettable:
        example: true
        type: boolean
      is_transferable:
        example: true
        type: boolean
      is_withdraw:
        example: true
        type: boolean
      updated_at:
        type: string
      user_id:
        example: 1
        type: integer
    type: object
  handlers.launchVirtualGameReq:
    properties:
      currency:
        example: USD
        type: string
      game_id:
        example: crash_001
        type: string
      mode:
        enum:
        - fun
        - real
        example: real
        type: string
    required:
    - currency
    - game_id
    - mode
    type: object
  handlers.launchVirtualGameRes:
    properties:
      launch_url:
        type: string
    type: object
  handlers.loginCustomerReq:
    properties:
      email:
        example: john.doe@example.com
        type: string
      password:
        example: password123
        type: string
      phone_number:
        example: "1234567890"
        type: string
    required:
    - password
    type: object
  handlers.loginCustomerRes:
    properties:
      access_token:
        type: string
      refresh_token:
        type: string
      role:
        type: string
    type: object
  handlers.logoutReq:
    properties:
      refresh_token:
        example: <refresh-token>
        type: string
    required:
    - refresh_token
    type: object
  handlers.refreshToken:
    properties:
      access_token:
        example: <jwt-token>
        type: string
      refresh_token:
        example: <refresh-token>
        type: string
    required:
    - access_token
    - refresh_token
    type: object
  handlers.updateAdminReq:
    properties:
      company_id:
        example: 1
        type: integer
      first_name:
        example: John
        type: string
      last_name:
        example: Doe
        type: string
      suspended:
        example: false
        type: boolean
    type: object
  handlers.updateCashierReq:
    properties:
      first_name:
        example: John
        type: string
      last_name:
        example: Doe
        type: string
      suspended:
        example: false
        type: boolean
    type: object
  handlers.updateManagerReq:
    properties:
      company_id:
        example: 1
        type: integer
      first_name:
        example: John
        type: string
      last_name:
        example: Doe
        type: string
      suspended:
        example: false
        type: boolean
    type: object
  response.APIResponse:
    properties:
      data: {}
      message:
        type: string
      metadata: {}
      page:
        type: integer
      status:
        $ref: '#/definitions/response.Status'
      timestamp:
        type: string
      total:
        type: integer
    type: object
  response.Status:
    enum:
    - error
    - success
    type: string
    x-enum-varnames:
    - Error
    - Success
info:
  contact:
    email: support@swagger.io
    name: API Support
    url: http://www.swagger.io/support
  description: This is server for FortuneBet.
  license:
    name: Apache 2.0
    url: http://www.apache.org/licenses/LICENSE-2.0.html
  termsOfService: http://swagger.io/terms/
  title: FortuneBet API
  version: 1.0.1
paths:
  /admin:
    get:
      consumes:
      - application/json
      description: Get all Admins
      parameters:
      - description: Page number
        in: query
        name: page
        type: integer
      - description: Page size
        in: query
        name: page_size
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handlers.AdminRes'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "401":
          description: Unauthorized
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Get all Admins
      tags:
      - admin
    post:
      consumes:
      - application/json
      description: Create Admin
      parameters:
      - description: Create admin
        in: body
        name: manger
        required: true
        schema:
          $ref: '#/definitions/handlers.CreateAdminReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/response.APIResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "401":
          description: Unauthorized
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Create Admin
      tags:
      - admin
  /admin/{id}:
    get:
      consumes:
      - application/json
      description: Get a single admin by id
      parameters:
      - description: User ID
        in: path
        name: id
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handlers.AdminRes'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "401":
          description: Unauthorized
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Get admin by id
      tags:
      - admin
    put:
      consumes:
      - application/json
      description: Update Admin
      parameters:
      - description: Update Admin
        in: body
        name: admin
        required: true
        schema:
          $ref: '#/definitions/handlers.updateAdminReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/response.APIResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "401":
          description: Unauthorized
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Update Admin
      tags:
      - admin
  /api/v1/alea-games/launch:
    get:
      consumes:
      - application/json
      description: Generates an authenticated launch URL for Alea Play virtual games
      parameters:
      - description: Game identifier (e.g., 'aviator', 'plinko')
        in: query
        name: game_id
        required: true
        type: string
      - default: USD
        description: Currency code (ISO 4217)
        enum:
        - USD
        - EUR
        - GBP
        in: query
        name: currency
        type: string
      - default: real
        description: Game mode
        enum:
        - real
        - demo
        in: query
        name: mode
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: Returns authenticated game launch URL
          schema:
            additionalProperties:
              allOf:
              - type: string
              - properties:
                  launch_url:
                    type: string
                type: object
            type: object
      security:
      - BearerAuth: []
      summary: Launch an Alea Play virtual game
      tags:
      - Alea Virtual Games
  /api/v1/chapa/banks:
    get:
      consumes:
      - application/json
      description: Get list of banks supported by Chapa
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/domain.Response'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/domain.ErrorResponse'
      summary: Get supported banks
      tags:
      - Chapa
  /api/v1/chapa/payments/deposit:
    post:
      consumes:
      - application/json
      description: Starts a new deposit process using Chapa payment gateway
      parameters:
      - description: Deposit request
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/domain.ChapaDepositRequestPayload'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/domain.ChapaDepositResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/domain.ErrorResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/domain.ErrorResponse'
      security:
      - ApiKeyAuth: []
      summary: Initiate a deposit
      tags:
      - Chapa
  /api/v1/chapa/payments/manual/verify/{tx_ref}:
    get:
      consumes:
      - application/json
      description: Manually verify a payment using Chapa's API
      parameters:
      - description: Transaction Reference
        in: path
        name: tx_ref
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/domain.ChapaVerificationResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/domain.ErrorResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/domain.ErrorResponse'
      summary: Verify a payment manually
      tags:
      - Chapa
  /api/v1/chapa/payments/webhook/verify:
    post:
      consumes:
      - application/json
      description: Handles payment notifications from Chapa
      parameters:
      - description: Webhook payload
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/domain.ChapaWebhookPayload'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            additionalProperties: true
            type: object
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/domain.ErrorResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/domain.ErrorResponse'
      summary: Chapa payment webhook callback (used by Chapa)
      tags:
      - Chapa
  /api/v1/chapa/payments/withdraw:
    post:
      consumes:
      - application/json
      description: Initiates a withdrawal request to transfer funds to a bank account
        via Chapa
      parameters:
      - description: Withdrawal request details
        in: body
        name: request
        required: true
        schema:
          $ref: '#/definitions/domain.ChapaWithdrawalRequest'
      produces:
      - application/json
      responses:
        "201":
          description: Chapa withdrawal process initiated successfully
          schema:
            $ref: '#/definitions/domain.Response'
        "400":
          description: Invalid request body
          schema:
            $ref: '#/definitions/domain.ErrorResponse'
        "401":
          description: Unauthorized
          schema:
            $ref: '#/definitions/domain.ErrorResponse'
        "422":
          description: Unprocessable entity
          schema:
            $ref: '#/definitions/domain.ErrorResponse'
        "500":
          description: Internal server error
          schema:
            $ref: '#/definitions/domain.ErrorResponse'
      security:
      - ApiKeyAuth: []
      summary: Initiate a withdrawal
      tags:
      - Chapa
  /api/v1/currencies:
    get:
      description: Returns list of supported currencies
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/domain.Response'
            - properties:
                data:
                  items:
                    type: integer
                  type: array
              type: object
      summary: Get supported currencies
      tags:
      - Multi-Currency
  /api/v1/currencies/convert:
    get:
      description: Converts amount from one currency to another
      parameters:
      - description: Source currency code (e.g., USD)
        in: query
        name: from
        required: true
        type: string
      - description: Target currency code (e.g., ETB)
        in: query
        name: to
        required: true
        type: string
      - description: Amount to convert
        in: query
        name: amount
        required: true
        type: number
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            allOf:
            - $ref: '#/definitions/domain.Response'
            - properties:
                data:
                  type: number
              type: object
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/domain.ErrorResponse'
      summary: Convert currency
      tags:
      - Multi-Currency
  /api/v1/reports/dashboard:
    get:
      consumes:
      - application/json
      description: Returns a comprehensive dashboard report with key metrics
      parameters:
      - description: Company ID filter
        in: query
        name: company_id
        type: integer
      - description: Branch ID filter
        in: query
        name: branch_id
        type: integer
      - description: User ID filter
        in: query
        name: user_id
        type: integer
      - description: Start time filter (RFC3339 format)
        in: query
        name: start_time
        type: string
      - description: End time filter (RFC3339 format)
        in: query
        name: end_time
        type: string
      - description: Sport ID filter
        in: query
        name: sport_id
        type: string
      - description: Status filter (0=Pending, 1=Win, 2=Loss, 3=Half, 4=Void, 5=Error)
        in: query
        name: status
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/domain.DashboardSummary'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/domain.ErrorResponse'
        "401":
          description: Unauthorized
          schema:
            $ref: '#/definitions/domain.ErrorResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/domain.ErrorResponse'
      security:
      - ApiKeyAuth: []
      summary: Get dashboard report
      tags:
      - Reports
  /api/v1/virtual-games/recommendations/{userID}:
    get:
      consumes:
      - application/json
      description: Returns a list of recommended virtual games for a specific user
      parameters:
      - description: User ID
        in: path
        name: userID
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: Recommended games fetched successfully
          schema:
            $ref: '#/definitions/domain.RecommendationSuccessfulResponse'
        "500":
          description: Failed to fetch recommendations
          schema:
            $ref: '#/definitions/domain.RecommendationErrorResponse'
      summary: Get virtual game recommendations
      tags:
      - Recommendations
  /api/v1/webhooks/alea:
    post:
      consumes:
      - application/json
      description: Handles webhook callbacks from Alea Play virtual games for bet
        settlement
      parameters:
      - description: Callback payload
        in: body
        name: callback
        required: true
        schema:
          $ref: '#/definitions/domain.AleaPlayCallback'
      produces:
      - application/json
      responses:
        "200":
          description: Callback processed successfully
          schema:
            additionalProperties:
              allOf:
              - type: string
              - properties:
                  status:
                    type: string
                type: object
            type: object
      summary: Process Alea Play game callback
      tags:
      - Alea Virtual Games
  /api/veli/launch/{game_id}:
    get:
      description: Generates authenticated launch URL for Veli games
      parameters:
      - description: Game ID (e.g., veli_aviator_v1)
        in: path
        name: game_id
        required: true
        type: string
      - default: USD
        description: Currency code
        in: query
        name: currency
        type: string
      - default: real
        description: Game mode
        enum:
        - real
        - demo
        in: query
        name: mode
        type: string
      responses:
        "200":
          description: Returns launch URL
          schema:
            additionalProperties:
              type: string
            type: object
        "400":
          description: Invalid request
          schema:
            additionalProperties:
              type: string
            type: object
        "500":
          description: Internal server error
          schema:
            additionalProperties:
              type: string
            type: object
      security:
      - BearerAuth: []
      summary: Launch a Veli game
      tags:
      - Veli Games
  /auth/login:
    post:
      consumes:
      - application/json
      description: Login customer
      parameters:
      - description: Login customer
        in: body
        name: login
        required: true
        schema:
          $ref: '#/definitions/handlers.loginCustomerReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handlers.loginCustomerRes'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "401":
          description: Unauthorized
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Login customer
      tags:
      - auth
  /auth/logout:
    post:
      consumes:
      - application/json
      description: Logout customer
      parameters:
      - description: Logout customer
        in: body
        name: logout
        required: true
        schema:
          $ref: '#/definitions/handlers.logoutReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/response.APIResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "401":
          description: Unauthorized
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Logout customer
      tags:
      - auth
  /auth/refresh:
    post:
      consumes:
      - application/json
      description: Refresh token
      parameters:
      - description: tokens
        in: body
        name: refresh
        required: true
        schema:
          $ref: '#/definitions/handlers.refreshToken'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handlers.loginCustomerRes'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "401":
          description: Unauthorized
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Refresh token
      tags:
      - auth
  /bet:
    get:
      consumes:
      - application/json
      description: Gets all the bets
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            items:
              $ref: '#/definitions/domain.BetRes'
            type: array
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Gets all bets
      tags:
      - bet
    post:
      consumes:
      - application/json
      description: Creates a bet
      parameters:
      - description: Creates bet
        in: body
        name: createBet
        required: true
        schema:
          $ref: '#/definitions/domain.CreateBetReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/domain.BetRes'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Create a bet
      tags:
      - bet
  /bet/{id}:
    delete:
      consumes:
      - application/json
      description: Deletes bet by id
      parameters:
      - description: Bet ID
        in: path
        name: id
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/response.APIResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Deletes bet by id
      tags:
      - bet
    get:
      consumes:
      - application/json
      description: Gets a single bet by id
      parameters:
      - description: Bet ID
        in: path
        name: id
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/domain.BetRes'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Gets bet by id
      tags:
      - bet
    patch:
      consumes:
      - application/json
      description: Updates the cashed out field
      parameters:
      - description: Bet ID
        in: path
        name: id
        required: true
        type: integer
      - description: Updates Cashed Out
        in: body
        name: updateCashOut
        required: true
        schema:
          $ref: '#/definitions/handlers.UpdateCashOutReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/response.APIResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Updates the cashed out field
      tags:
      - bet
  /bet/cashout/{id}:
    get:
      consumes:
      - application/json
      description: Gets a single bet by cashout id
      parameters:
      - description: cashout ID
        in: path
        name: id
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/domain.BetRes'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Gets bet by cashout id
      tags:
      - bet
  /branch:
    get:
      consumes:
      - application/json
      description: Gets all branches
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            items:
              $ref: '#/definitions/handlers.BranchDetailRes'
            type: array
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Gets all branches
      tags:
      - branch
    post:
      consumes:
      - application/json
      description: Creates a branch
      parameters:
      - description: Creates branch
        in: body
        name: createBranch
        required: true
        schema:
          $ref: '#/definitions/handlers.CreateBranchReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handlers.BranchRes'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Create a branch
      tags:
      - branch
  /branch/{id}:
    delete:
      consumes:
      - application/json
      description: Delete the branch
      parameters:
      - description: Branch ID
        in: path
        name: id
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/response.APIResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Delete the branch
      tags:
      - branch
    get:
      consumes:
      - application/json
      description: Gets a single branch by id
      parameters:
      - description: Branch ID
        in: path
        name: id
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handlers.BranchDetailRes'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Gets branch by id
      tags:
      - branch
    put:
      consumes:
      - application/json
      description: Updates a branch
      parameters:
      - description: Branch ID
        in: path
        name: id
        required: true
        type: integer
      - description: Update Branch
        in: body
        name: updateBranch
        required: true
        schema:
          $ref: '#/definitions/handlers.CreateBranchReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handlers.BranchRes'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Updates a branch
      tags:
      - branch
  /branch/{id}/bets:
    get:
      consumes:
      - application/json
      description: Gets bets by its branch id
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            items:
              $ref: '#/definitions/domain.BetRes'
            type: array
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Gets bets by its branch id
      tags:
      - branch
  /branch/{id}/cashier:
    get:
      consumes:
      - application/json
      description: Gets branch cashiers
      parameters:
      - description: Branch ID
        in: path
        name: id
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            items:
              $ref: '#/definitions/handlers.GetCashierRes'
            type: array
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Gets branch cashiers
      tags:
      - branch
  /branch/{id}/operation:
    get:
      consumes:
      - application/json
      description: Gets branch operations
      parameters:
      - description: Branch ID
        in: path
        name: id
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            items:
              $ref: '#/definitions/handlers.BranchOperationRes'
            type: array
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Gets branch operations
      tags:
      - branch
  /branch/{id}/operation/{opID}:
    delete:
      consumes:
      - application/json
      description: Delete the branch operation
      parameters:
      - description: Branch ID
        in: path
        name: id
        required: true
        type: integer
      - description: Branch Operation ID
        in: path
        name: opID
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/response.APIResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Delete the branch operation
      tags:
      - branch
  /branchCashier:
    get:
      consumes:
      - application/json
      description: Gets branch for cahier
      parameters:
      - description: Branch ID
        in: path
        name: id
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handlers.BranchDetailRes'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Gets branch for cahier
      tags:
      - branch
  /branchWallet:
    get:
      consumes:
      - application/json
      description: Retrieve all branch wallets
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            items:
              $ref: '#/definitions/handlers.WalletRes'
            type: array
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Get all branch wallets
      tags:
      - wallet
  /cashier/{id}:
    get:
      consumes:
      - application/json
      description: Get a single cashier by id
      parameters:
      - description: User ID
        in: path
        name: id
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handlers.UserProfileRes'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "401":
          description: Unauthorized
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Get cashier by id
      tags:
      - cashier
  /cashierWallet:
    get:
      consumes:
      - application/json
      description: Get wallet for cashier
      parameters:
      - description: User ID
        in: path
        name: id
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handlers.UserProfileRes'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "401":
          description: Unauthorized
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Get wallet for cashier
      tags:
      - cashier
  /cashiers:
    get:
      consumes:
      - application/json
      description: Get all cashiers
      parameters:
      - description: Page number
        in: query
        name: page
        type: integer
      - description: Page size
        in: query
        name: page_size
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/response.APIResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "401":
          description: Unauthorized
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Get all cashiers
      tags:
      - cashier
    post:
      consumes:
      - application/json
      description: Create cashier
      parameters:
      - description: Create cashier
        in: body
        name: cashier
        required: true
        schema:
          $ref: '#/definitions/handlers.CreateCashierReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/response.APIResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "401":
          description: Unauthorized
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Create cashier
      tags:
      - cashier
  /cashiers/{id}:
    put:
      consumes:
      - application/json
      description: Update cashier
      parameters:
      - description: Cashier ID
        in: path
        name: id
        required: true
        type: integer
      - description: Update cashier
        in: body
        name: cashier
        required: true
        schema:
          $ref: '#/definitions/handlers.updateCashierReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/response.APIResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "401":
          description: Unauthorized
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Update cashier
      tags:
      - cashier
  /company:
    get:
      consumes:
      - application/json
      description: Gets all companies
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            items:
              $ref: '#/definitions/handlers.CompanyRes'
            type: array
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Gets all companies
      tags:
      - company
    post:
      consumes:
      - application/json
      description: Creates a company
      parameters:
      - description: Creates company
        in: body
        name: createCompany
        required: true
        schema:
          $ref: '#/definitions/handlers.CreateCompanyReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handlers.CompanyRes'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Create a company
      tags:
      - company
  /company/{id}:
    delete:
      consumes:
      - application/json
      description: Delete the company
      parameters:
      - description: Company ID
        in: path
        name: id
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/response.APIResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Delete the company
      tags:
      - company
    get:
      consumes:
      - application/json
      description: Gets a single company by id
      parameters:
      - description: Company ID
        in: path
        name: id
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handlers.CompanyRes'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Gets company by id
      tags:
      - company
    put:
      consumes:
      - application/json
      description: Updates a company
      parameters:
      - description: Company ID
        in: path
        name: id
        required: true
        type: integer
      - description: Update Company
        in: body
        name: updateCompany
        required: true
        schema:
          $ref: '#/definitions/handlers.UpdateCompanyReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handlers.CompanyRes'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Updates a company
      tags:
      - company
  /company/{id}/branch:
    get:
      consumes:
      - application/json
      description: Gets branches by company id
      parameters:
      - description: Company ID
        in: path
        name: id
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            items:
              $ref: '#/definitions/handlers.BranchDetailRes'
            type: array
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Gets branches by company id
      tags:
      - branch
  /events:
    get:
      consumes:
      - application/json
      description: Retrieve all upcoming events from the database
      parameters:
      - description: Page number
        in: query
        name: page
        type: integer
      - description: Page size
        in: query
        name: page_size
        type: integer
      - description: League ID Filter
        in: query
        name: league_id
        type: string
      - description: Sport ID Filter
        in: query
        name: sport_id
        type: string
      - description: Country Code Filter
        in: query
        name: cc
        type: string
      - description: Start Time
        in: query
        name: first_start_time
        type: string
      - description: End Time
        in: query
        name: last_start_time
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            items:
              $ref: '#/definitions/domain.UpcomingEvent'
            type: array
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Retrieve all upcoming events
      tags:
      - prematch
  /events/{id}:
    delete:
      consumes:
      - application/json
      description: Set the event status to removed
      parameters:
      - description: Event ID
        in: path
        name: id
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/response.APIResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Set the event status to removed
      tags:
      - event
    get:
      consumes:
      - application/json
      description: Retrieve an upcoming event by ID
      parameters:
      - description: ID
        in: path
        name: id
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/domain.UpcomingEvent'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Retrieve an upcoming by ID
      tags:
      - prematch
  /leagues:
    get:
      consumes:
      - application/json
      description: Gets all leagues
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            items:
              $ref: '#/definitions/domain.League'
            type: array
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Gets all leagues
      tags:
      - leagues
  /manager/{id}/branch:
    get:
      consumes:
      - application/json
      description: Gets a branches by manager id
      parameters:
      - description: User ID
        in: path
        name: id
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            items:
              $ref: '#/definitions/handlers.BranchDetailRes'
            type: array
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Gets branches by manager id
      tags:
      - branch
  /managers:
    get:
      consumes:
      - application/json
      description: Get all Managers
      parameters:
      - description: Page number
        in: query
        name: page
        type: integer
      - description: Page size
        in: query
        name: page_size
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handlers.ManagersRes'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "401":
          description: Unauthorized
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Get all Managers
      tags:
      - manager
    post:
      consumes:
      - application/json
      description: Create Manager
      parameters:
      - description: Create manager
        in: body
        name: manger
        required: true
        schema:
          $ref: '#/definitions/handlers.CreateManagerReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/response.APIResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "401":
          description: Unauthorized
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Create Manager
      tags:
      - manager
  /managers/{id}:
    get:
      consumes:
      - application/json
      description: Get a single manager by id
      parameters:
      - description: User ID
        in: path
        name: id
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handlers.ManagersRes'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "401":
          description: Unauthorized
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Get manager by id
      tags:
      - manager
    put:
      consumes:
      - application/json
      description: Update Managers
      parameters:
      - description: Update Managers
        in: body
        name: Managers
        required: true
        schema:
          $ref: '#/definitions/handlers.updateManagerReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/response.APIResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "401":
          description: Unauthorized
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Update Managers
      tags:
      - manager
  /odds:
    get:
      consumes:
      - application/json
      description: Retrieve all prematch odds from the database
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            items:
              $ref: '#/definitions/domain.Odd'
            type: array
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Retrieve all prematch odds
      tags:
      - prematch
  /odds/upcoming/{upcoming_id}:
    get:
      consumes:
      - application/json
      description: Retrieve prematch odds by upcoming event ID (FI from Bet365) with
        optional pagination
      parameters:
      - description: Upcoming Event ID (FI)
        in: path
        name: upcoming_id
        required: true
        type: string
      - description: 'Number of results to return (default: 10)'
        in: query
        name: limit
        type: integer
      - description: 'Number of results to skip (default: 0)'
        in: query
        name: offset
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            items:
              $ref: '#/definitions/domain.Odd'
            type: array
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Retrieve prematch odds by upcoming ID (FI)
      tags:
      - prematch
  /odds/upcoming/{upcoming_id}/market/{market_id}:
    get:
      consumes:
      - application/json
      description: Retrieve raw odds records using a Market ID
      parameters:
      - description: Upcoming ID
        in: path
        name: upcoming_id
        required: true
        type: string
      - description: Market ID
        in: path
        name: market_id
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            items:
              $ref: '#/definitions/domain.RawOddsByMarketID'
            type: array
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Retrieve raw odds by Market ID
      tags:
      - prematch
  /operation:
    post:
      consumes:
      - application/json
      description: Creates a operation
      parameters:
      - description: Creates operation
        in: body
        name: createBranchOperation
        required: true
        schema:
          $ref: '#/definitions/handlers.CreateBranchOperationReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handlers.BranchOperationRes'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Create a operation
      tags:
      - branch
  /random/bet:
    post:
      consumes:
      - application/json
      description: Generate a random bet
      parameters:
      - description: Create Random bet
        in: body
        name: createBet
        required: true
        schema:
          $ref: '#/definitions/domain.RandomBetReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/domain.BetRes'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Generate a random bet
      tags:
      - bet
  /referral/settings:
    get:
      consumes:
      - application/json
      description: Retrieves current referral settings (admin only)
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/domain.ReferralSettings'
        "401":
          description: Unauthorized
          schema:
            $ref: '#/definitions/response.APIResponse'
        "403":
          description: Forbidden
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      security:
      - Bearer: []
      summary: Get referral settings
      tags:
      - referral
    put:
      consumes:
      - application/json
      description: Updates referral settings (admin only)
      parameters:
      - description: Referral settings
        in: body
        name: settings
        required: true
        schema:
          $ref: '#/definitions/domain.ReferralSettings'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/response.APIResponse'
        "401":
          description: Unauthorized
          schema:
            $ref: '#/definitions/response.APIResponse'
        "403":
          description: Forbidden
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      security:
      - Bearer: []
      summary: Update referral settings
      tags:
      - referral
  /referral/stats:
    get:
      consumes:
      - application/json
      description: Retrieves referral statistics for the authenticated user
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/domain.ReferralStats'
        "401":
          description: Unauthorized
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      security:
      - Bearer: []
      summary: Get referral statistics
      tags:
      - referral
  /result/{id}:
    get:
      consumes:
      - application/json
      description: Get results for an event
      parameters:
      - description: Event ID
        in: path
        name: id
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            items:
              $ref: '#/definitions/handlers.ResultRes'
            type: array
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Get results for an event
      tags:
      - result
  /search/branch:
    get:
      consumes:
      - application/json
      description: Search branches by name or location
      parameters:
      - description: Search query
        in: query
        name: q
        required: true
        type: string
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            items:
              $ref: '#/definitions/handlers.BranchDetailRes'
            type: array
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Search branches
      tags:
      - branch
  /search/company:
    get:
      consumes:
      - application/json
      description: Gets all companies
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            items:
              $ref: '#/definitions/handlers.CompanyRes'
            type: array
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Gets all companies
      tags:
      - company
  /supportedOperation:
    get:
      consumes:
      - application/json
      description: Gets all supported operations
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            items:
              $ref: '#/definitions/handlers.BranchDetailRes'
            type: array
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Gets all supported operations
      tags:
      - branch
    post:
      consumes:
      - application/json
      description: Creates a supported operation
      parameters:
      - description: Creates supported operation
        in: body
        name: createSupportedOperation
        required: true
        schema:
          $ref: '#/definitions/handlers.CreateSupportedOperationReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handlers.SupportedOperationRes'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Create a supported operation
      tags:
      - branch
  /ticket:
    get:
      consumes:
      - application/json
      description: Retrieve all tickets
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            items:
              $ref: '#/definitions/handlers.TicketRes'
            type: array
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Get all tickets
      tags:
      - ticket
    post:
      consumes:
      - application/json
      description: Creates a temporary ticket
      parameters:
      - description: Creates ticket
        in: body
        name: createTicket
        required: true
        schema:
          $ref: '#/definitions/handlers.CreateTicketReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handlers.CreateTicketRes'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Create a temporary ticket
      tags:
      - ticket
  /ticket/{id}:
    get:
      consumes:
      - application/json
      description: Retrieve ticket details by ticket ID
      parameters:
      - description: Ticket ID
        in: path
        name: id
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handlers.TicketRes'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Get ticket by ID
      tags:
      - ticket
  /transaction:
    get:
      consumes:
      - application/json
      description: Gets all the transactions
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            items:
              $ref: '#/definitions/handlers.TransactionRes'
            type: array
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Gets all transactions
      tags:
      - transaction
    post:
      consumes:
      - application/json
      description: Creates a transaction
      parameters:
      - description: Creates transaction
        in: body
        name: createBet
        required: true
        schema:
          $ref: '#/definitions/handlers.CreateTransactionReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handlers.TransactionRes'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Create a transaction
      tags:
      - transaction
  /transaction/{id}:
    get:
      consumes:
      - application/json
      description: Gets a single transaction by id
      parameters:
      - description: Transaction ID
        in: path
        name: id
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handlers.TransactionRes'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Gets transaction by id
      tags:
      - transaction
    put:
      consumes:
      - application/json
      description: Updates the verified status of a transaction
      parameters:
      - description: Transaction ID
        in: path
        name: id
        required: true
        type: integer
      - description: Updates Transaction Verification
        in: body
        name: updateVerified
        required: true
        schema:
          $ref: '#/definitions/handlers.UpdateTransactionVerifiedReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/response.APIResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Updates the verified field of a transaction
      tags:
      - transaction
  /transfer/refill/:id:
    post:
      consumes:
      - application/json
      description: Super Admin route to refill a wallet
      parameters:
      - description: Create Transfer
        in: body
        name: refillWallet
        required: true
        schema:
          $ref: '#/definitions/handlers.CreateTransferReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handlers.TransferWalletRes'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Refill wallet
      tags:
      - transfer
  /transfer/wallet/:id:
    post:
      consumes:
      - application/json
      description: Create a transfer to wallet
      parameters:
      - description: Create Transfer
        in: body
        name: transferToWallet
        required: true
        schema:
          $ref: '#/definitions/handlers.CreateTransferReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handlers.TransferWalletRes'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Create a transfer to wallet
      tags:
      - transfer
  /transfer/wallet/{id}:
    get:
      consumes:
      - application/json
      description: Get transfer by  wallet
      parameters:
      - description: Create Transfer
        in: body
        name: transferToWallet
        required: true
        schema:
          $ref: '#/definitions/handlers.CreateTransferReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handlers.TransferWalletRes'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Get transfer by  wallet
      tags:
      - transfer
  /user/bets:
    get:
      consumes:
      - application/json
      description: Gets user bets
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            items:
              $ref: '#/definitions/domain.BetRes'
            type: array
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Gets user bets
      tags:
      - user
  /user/checkPhoneEmailExist:
    post:
      consumes:
      - application/json
      description: Check if phone number or email exist
      parameters:
      - description: Check phone number or email exist
        in: body
        name: checkPhoneEmailExist
        required: true
        schema:
          $ref: '#/definitions/handlers.CheckPhoneEmailExistReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handlers.CheckPhoneEmailExistRes'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Check if phone number or email exist
      tags:
      - user
  /user/delete/{id}:
    delete:
      consumes:
      - application/json
      description: Delete a user by their ID
      parameters:
      - description: User ID
        in: path
        name: id
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/response.APIResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Delete user by ID
      tags:
      - user
  /user/profile:
    get:
      consumes:
      - application/json
      description: Get user profile
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handlers.UserProfileRes'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      security:
      - Bearer: []
      summary: Get user profile
      tags:
      - user
  /user/register:
    post:
      consumes:
      - application/json
      description: Register user
      parameters:
      - description: Register user
        in: body
        name: registerUser
        required: true
        schema:
          $ref: '#/definitions/handlers.RegisterUserReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/response.APIResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Register user
      tags:
      - user
  /user/resetPassword:
    post:
      consumes:
      - application/json
      description: Reset password
      parameters:
      - description: Reset password
        in: body
        name: resetPassword
        required: true
        schema:
          $ref: '#/definitions/handlers.ResetPasswordReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/response.APIResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Reset password
      tags:
      - user
  /user/search:
    post:
      consumes:
      - application/json
      description: Search for user using name or phone
      parameters:
      - description: Search for using his name or phone
        in: body
        name: searchUserByNameOrPhone
        required: true
        schema:
          $ref: '#/definitions/handlers.SearchUserByNameOrPhoneReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handlers.UserProfileRes'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Search for user using name or phone
      tags:
      - user
  /user/sendRegisterCode:
    post:
      consumes:
      - application/json
      description: Send register code
      parameters:
      - description: Send register code
        in: body
        name: registerCode
        required: true
        schema:
          $ref: '#/definitions/handlers.RegisterCodeReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/response.APIResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Send register code
      tags:
      - user
  /user/sendResetCode:
    post:
      consumes:
      - application/json
      description: Send reset code
      parameters:
      - description: Send reset code
        in: body
        name: resetCode
        required: true
        schema:
          $ref: '#/definitions/handlers.ResetCodeReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/response.APIResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Send reset code
      tags:
      - user
  /user/single/{id}:
    get:
      consumes:
      - application/json
      description: Get a single user by id
      parameters:
      - description: User ID
        in: path
        name: id
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handlers.UserProfileRes'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "401":
          description: Unauthorized
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Get user by id
      tags:
      - user
  /user/suspend:
    post:
      consumes:
      - application/json
      description: Suspend or unsuspend a user
      parameters:
      - description: Suspend or unsuspend a user
        in: body
        name: updateUserSuspend
        required: true
        schema:
          $ref: '#/definitions/handlers.UpdateUserSuspendReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handlers.UpdateUserSuspendRes'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Suspend or unsuspend a user
      tags:
      - user
  /user/wallet:
    get:
      consumes:
      - application/json
      description: Retrieve customer wallet details
      parameters:
      - description: Company ID
        in: header
        name: company_id
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handlers.CustomerWalletRes'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      security:
      - Bearer: []
      summary: Get customer wallet
      tags:
      - wallet
  /virtual-game/callback:
    post:
      consumes:
      - application/json
      description: Processes callbacks from PopOK for game events
      parameters:
      - description: Callback data
        in: body
        name: callback
        required: true
        schema:
          $ref: '#/definitions/domain.PopOKCallback'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/response.APIResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Handle PopOK game callback
      tags:
      - virtual-game
  /virtual-game/launch:
    post:
      consumes:
      - application/json
      description: Generates a URL to launch a PopOK game
      parameters:
      - description: Game launch details
        in: body
        name: launch
        required: true
        schema:
          $ref: '#/definitions/handlers.launchVirtualGameReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handlers.launchVirtualGameRes'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "401":
          description: Unauthorized
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      security:
      - Bearer: []
      summary: Launch a PopOK virtual game
      tags:
      - virtual-game
  /wallet:
    get:
      consumes:
      - application/json
      description: Retrieve all wallets
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            items:
              $ref: '#/definitions/handlers.WalletRes'
            type: array
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Get all wallets
      tags:
      - wallet
  /wallet/{id}:
    get:
      consumes:
      - application/json
      description: Retrieve wallet details by wallet ID
      parameters:
      - description: Wallet ID
        in: path
        name: id
        required: true
        type: integer
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/handlers.WalletRes'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Get wallet by ID
      tags:
      - wallet
    patch:
      consumes:
      - application/json
      description: Can activate and deactivate wallet
      parameters:
      - description: Wallet ID
        in: path
        name: id
        required: true
        type: integer
      - description: Update Wallet Active
        in: body
        name: updateCashOut
        required: true
        schema:
          $ref: '#/definitions/handlers.UpdateWalletActiveReq'
      produces:
      - application/json
      responses:
        "200":
          description: OK
          schema:
            $ref: '#/definitions/response.APIResponse'
        "400":
          description: Bad Request
          schema:
            $ref: '#/definitions/response.APIResponse'
        "500":
          description: Internal Server Error
          schema:
            $ref: '#/definitions/response.APIResponse'
      summary: Activate and Deactivate Wallet
      tags:
      - wallet
  /webhooks/veli:
    post:
      consumes:
      - application/json
      description: Processes game round settlements from Veli
      parameters:
      - description: Callback payload
        in: body
        name: payload
        required: true
        schema:
          $ref: '#/definitions/domain.VeliCallback'
      produces:
      - application/json
      responses:
        "200":
          description: Callback processed
          schema:
            additionalProperties:
              type: string
            type: object
        "400":
          description: Invalid payload
          schema:
            additionalProperties:
              type: string
            type: object
        "403":
          description: Invalid signature
          schema:
            additionalProperties:
              type: string
            type: object
        "500":
          description: Processing error
          schema:
            additionalProperties:
              type: string
            type: object
      summary: Veli Games webhook handler
      tags:
      - Veli Games
securityDefinitions:
  Bearer:
    in: header
    name: Authorization
    type: apiKey
swagger: "2.0"
