/*******************************************************************************
 * Copyright 2017 Dell Inc.
 * Copyright (c) 2019 Intel Corporation
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
 * in compliance with the License. You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the License
 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 * or implied. See the License for the specific language governing permissions and limitations under
 * the License.
 *******************************************************************************/
package dtos

import "strings"

type PageRequest struct {
    NameLike string `json:"nameLike" form:"nameLike"`
    Page     int    `json:"page" form:"page"`
    PageSize int    `json:"pageSize" form:"pageSize"`
}

//func (p *PageRequest) ToRpc() *common.PageRequest {
//    return &common.PageRequest{
//        NameLike: p.NameLike,
//        Page:     int64(p.Page),
//        PageSize: int64(p.PageSize),
//    }
//}


type BaseSearchConditionQuery struct {
    Page     int    `schema:"page,omitempty" form:"page"`
    PageSize int    `schema:"pageSize,omitempty" form:"pageSize" json:"pageSize"`
    Id       string `schema:"id,omitempty" form:"id"`
    Ids      string `schema:"ids,omitempty" form:"ids"`
    LikeId   string `schema:"likeId,omitempty" form:"likeId"`
    Name     string `schema:"name,omitempty" form:"name"`
    NameLike string `schema:"nameLike,omitempty" form:"nameLike"`
    IsAll    bool   `schema:"isAll,omitempty" form:"isAll"`
    OrderBy  string `schema:"orderBy,omitempty" form:"orderBy"`
}

func (req BaseSearchConditionQuery) GetPage() (int, int) {
    var (
        offset = (req.Page - 1) * req.PageSize
        limit  = req.PageSize
    )
    if req.Page == 0 && req.PageSize == 0 {
        offset = 0
        limit = -1
    }
    if req.IsAll {
        offset = 0
        limit = -1
    }
    return offset, limit
}


func ApiParamsStringToArray(str string) []string {
    return strings.Split(str, ",")
}

/**
前端/后端请求查询的通用order by，查询key必须是models里存在的值
比如 通过models.Device.ProductName 排序， 那么key的值为 ProductName或则对应的数据库字段 product_name， 不能是 pn
*/
type ApiOrderBy struct {
    Key    string
    IsDesc bool
}

func ApiParamsStringToOrderBy(str string) []ApiOrderBy {
    orderBys := make([]ApiOrderBy, 0)
    arr := strings.Split(str, ",")
    if len(arr) <= 0 {
        return nil
    }
    for _, v := range arr {
        vArr := strings.Split(v, ":")
        if len(vArr) <= 1 {
            continue
        }
        switch vArr[1] {
        case "desc":
            orderBys = append(orderBys, ApiOrderBy{
                Key:    vArr[0],
                IsDesc: true,
            })
        case "asc":
            orderBys = append(orderBys, ApiOrderBy{
                Key:    vArr[0],
                IsDesc: false,
            })
        default:
            continue
        }
    }
    return orderBys
}


func ApiParamsArrayToString(arr []string) string {
    return strings.Join(arr, ",")
}

