package handlers

// @Summary Create a new bank
// @Tags Institutions - Banks
// @Accept json
// @Produce json
// @Param bank body domain.Bank true "Bank Info"
// @Success 201 {object} domain.Bank
// @Failure 400 {object} domain.ErrorResponse
// @Router /api/v1/banks [post]
// func (h *Handler) CreateBank(c *fiber.Ctx) error {
// 	var bank domain.Bank
// 	if err := c.BodyParser(&bank); err != nil {
// 		return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "invalid payload"})
// 	}

// 	// err := h.instSvc.Create(c.Context(), &bank)
// 	// if err != nil {
// 	// 	return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": err.Error()})
// 	// }
// 	return c.Status(fiber.StatusCreated).JSON(bank)
// }

// @Summary Get a bank by ID
// @Tags Institutions - Banks
// @Produce json
// @Param id path int true "Bank ID"
// @Success 200 {object} domain.Bank
// @Failure 400 {object} domain.ErrorResponse
// @Failure 404 {object} domain.ErrorResponse
// @Failure 500 {object} domain.ErrorResponse
// @Router /api/v1/banks/{id} [get]
// func (h *Handler) GetBankByID(c *fiber.Ctx) error {
// 	id, err := c.ParamsInt("id")
// 	if err != nil || id <= 0 {
// 		return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "invalid bank ID"})
// 	}

// 	// bank, err := h.instSvc.GetByID(c.Context(), int64(id))
// 	// if err != nil {
// 	// 	return c.Status(fiber.StatusNotFound).JSON(fiber.Map{"error": "bank not found"})
// 	// }

// 	return c.JSON(bank)
// }

// @Summary Update a bank
// @Tags Institutions - Banks
// @Accept json
// @Produce json
// @Param id path int true "Bank ID"
// @Param bank body domain.Bank true "Bank Info"
// @Success 200 {object} domain.Bank
// @Failure 400 {object} domain.ErrorResponse
// @Failure 404 {object} domain.ErrorResponse
// @Failure 500 {object} domain.ErrorResponse
// @Router /api/v1/banks/{id} [put]
// func (h *Handler) UpdateBank(c *fiber.Ctx) error {
// 	id, err := c.ParamsInt("id")
// 	if err != nil || id <= 0 {
// 		// return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "invalid bank ID"})
// 		return c.Status(fiber.StatusBadRequest).JSON(domain.ErrorResponse{
// 			Message: "Failed to update bank",
// 			Error:   err.Error(),
// 		})
// 	}

// 	var bank domain.Bank
// 	if err := c.BodyParser(&bank); err != nil {
// 		// return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "invalid payload"})
// 		return c.Status(fiber.StatusBadRequest).JSON(domain.ErrorResponse{
// 			Message: "Failed to update bank",
// 			Error:   err.Error(),
// 		})
// 	}
// 	bank.ID = id

// 	err = h.instSvc.Update(c.Context(), &bank)
// 	if err != nil {
// 		return c.Status(fiber.StatusInternalServerError).JSON(domain.ErrorResponse{
// 			Message: "Failed to update bank",
// 			Error:   err.Error(),
// 		})
// 	}

// 	return c.Status(fiber.StatusOK).JSON(domain.Response{
// 		Message:    "Bank updated successfully",
// 		StatusCode: fiber.StatusOK,
// 		Success:    true,
// 		Data:       bank,
// 	})
// 	// return c.JSON(bank)
// }

// @Summary Delete a bank
// @Tags Institutions - Banks
// @Produce json
// @Param id path int true "Bank ID"
// @Success 204 {string} string "Deleted successfully"
// @Failure 400 {object} domain.ErrorResponse
// @Failure 404 {object} domain.ErrorResponse
// @Failure 500 {object} domain.ErrorResponse
// @Router /api/v1/banks/{id} [delete]
// func (h *Handler) DeleteBank(c *fiber.Ctx) error {
// 	id, err := c.ParamsInt("id")
// 	if err != nil || id <= 0 {
// 		return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "invalid bank ID"})
// 	}

// 	err = h.instSvc.Delete(c.Context(), int64(id))
// 	if err != nil {
// 		return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": err.Error()})
// 	}

// 	return c.SendStatus(fiber.StatusNoContent)
// }

// @Summary List all banks with pagination and filtering
// @Tags Institutions - Banks
// @Produce json
// @Param country_id query integer false "Filter by country ID"
// @Param is_active query boolean false "Filter by active status"
// @Param search query string false "Search term for bank name or code"
// @Param page query integer false "Page number" default(1)
// @Param page_size query integer false "Items per page" default(50) maximum(100)
// @Success 200 {object} domain.InstResponse
// @Failure 400 {object} domain.ErrorResponse
// @Failure 500 {object} domain.ErrorResponse
// @Router /api/v1/banks [get]
// func (h *Handler) ListBanks(c *fiber.Ctx) error {
// 	// Parse query parameters
// 	countryID, _ := strconv.Atoi(c.Query("country_id"))
// 	var countryIDPtr *int
// 	if c.Query("country_id") != "" {
// 		countryIDPtr = &countryID
// 	}

// 	isActive, _ := strconv.ParseBool(c.Query("is_active"))
// 	var isActivePtr *bool
// 	if c.Query("is_active") != "" {
// 		isActivePtr = &isActive
// 	}

// 	var searchTermPtr *string
// 	if searchTerm := c.Query("search"); searchTerm != "" {
// 		searchTermPtr = &searchTerm
// 	}

// 	page, _ := strconv.Atoi(c.Query("page", "1"))
// 	pageSize, _ := strconv.Atoi(c.Query("page_size", "50"))

// 	banks, pagination, err := h.instSvc.List(
// 		c.Context(),
// 		countryIDPtr,
// 		isActivePtr,
// 		searchTermPtr,
// 		page,
// 		pageSize,
// 	)
// 	if err != nil {
// 		h.mongoLoggerSvc.Error("failed to list banks",
// 			zap.Error(err),
// 			zap.Any("query_params", c.Queries()),
// 		)
// 		return c.Status(fiber.StatusInternalServerError).JSON(domain.ErrorResponse{
// 			Message: "Failed to retrieve banks",
// 			Error:   err.Error(),
// 		})
// 	}

// 	return c.Status(fiber.StatusOK).JSON(domain.InstResponse{
// 		Message:    "Banks retrieved successfully",
// 		Status:     "success",
// 		Data:       banks,
// 		Pagination: pagination,
// 	})
// }
