package com.heyu.api.resp.face;

import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

/***
 * https://next.api.aliyun.com/api/facebody/2019-12-30/PedestrianDetectAttribute?RegionId=cn-shanghai&tab=DEBUG&params={%22ImageURL%22:%22http%3A%2F%2Fworkbench-file-transfer.oss-cn-shanghai.aliyuncs.com%2Fuser-files%2Fa8412c32-3e41-458c-9d5c-a55e9dff0bc6-PedestrianDetectAttribute1.jpg%3FOSSAccessKeyId%3DLTAI5tRvL6vYdjKSfTFZ156m%26Expires%3D1742094860%26Signature%3Di3aty663zZGOgYl5VjnkkiRVxkY%253D%26response-content-disposition%3Dattachment%22}
 *人体结构化属性
 *
 * PedestrianDetectAttribute
 *
 */
@Data
public class PedestrianDetectAttributeResp {
    /***
     * 检测到的行人个数，取值为正整数。
     *
     * 示例值:
     * 1
     *
     */
    private Integer personNumber;
    /***
     * 行人属性。
     */
    private List<AttributesDTO> attributes;

    /***
     * 原图的高度，单位像素。
     *
     * 注意 请注意，该值为 Long 类型，在某些语言中可能存在精度丢失的风险，请小心使用。
     * 示例值:
     * 584
     */
    private Long height;

    /***
     * 原图的宽度，单位像素。
     *
     * 注意 请注意，该值为 Long 类型，在某些语言中可能存在精度丢失的风险，请小心使用。
     * 示例值:
     * 264
     */
    private Long width;

    /***
     * 检测到行人边界框的坐标。
     */
    private List<BoxesDTO> boxes;



    @Data
    public static class AttributesDTO {
        /***
         *Trousers（长裤）；Shorts（短裤）；Skirt&Dress（裙子）。
         *
         * 示例值:
         * Trousers
         */
        private LowerWearDTO lowerWear;
        /***
         * Yes（有背包）；No（无背包）。
         *
         * 示例值:
         * No
         */
        private BackpackDTO backpack;
        /***
         * Front（正向）；Side（侧向）；Back（背面）。
         *
         * 示例值:
         * Front
         *
         */
        private OrientDTO orient;
        /**
         * Yes（有肩挎包）；No（无肩挎包）。
         *
         * 示例值:
         * No
         */
        private ShoulderBagDTO shoulderBag;
        /***
         * 黑，灰，蓝，绿，白，紫，红，棕，黄，粉，不确定。
         *
         * 示例值:
         * 黄
         */
        private LowerColorDTO lowerColor;
        /***
         * Yes（戴眼镜）；No（不戴眼镜）。
         *
         * 示例值:
         * No
         */
        private GlassesDTO glasses;
        /***
         *黑，灰，蓝，绿，白，紫，红，棕，黄，粉，不确定。
         *
         * 示例值:
         * 黄
         *
         */
        private UpperColorDTO upperColor;
        /***
         * Yes（戴帽子）；No（不戴帽子）。
         *
         * 示例值:
         * No
         */
        private HatDTO hat;
        /***
         * Yes（有手提包）；No（无手提包）。
         *
         * 示例值:
         * Yes
         *
         */
        private HandbagDTO handbag;
        /**
         * 性别。
         */
        private GenderDTO gender;
        /**
         * AgeOver60（大于 60 岁）；Age18-60（18-60 岁之间）；AgeLess18（小于 18 岁）。
         *
         * 示例值:
         * Age18-60
         *
         */
        private AgeDTO age;
        /***
         * LongSleeve（长袖）；ShortSleeve（短袖）。
         *
         * 示例值:
         * ShortSleeve
         */
        private UpperWearDTO upperWear;

        @NoArgsConstructor
        @Data
        public static class LowerWearDTO {
            private Float score;
            private String name;
        }

        @NoArgsConstructor
        @Data
        public static class BackpackDTO {
            private Float score;
            private String name;
        }

        @NoArgsConstructor
        @Data
        public static class OrientDTO {
            private Float score;
            private String name;
        }

        @NoArgsConstructor
        @Data
        public static class ShoulderBagDTO {
            private Float score;
            private String name;
        }

        @NoArgsConstructor
        @Data
        public static class LowerColorDTO {
            private Float score;
            private String name;
        }

        @NoArgsConstructor
        @Data
        public static class GlassesDTO {
            private Float score;
            private String name;
        }

        @NoArgsConstructor
        @Data
        public static class UpperColorDTO {
            private Float score;
            private String name;
        }

        @NoArgsConstructor
        @Data
        public static class HatDTO {
            private Float score;
            private String name;
        }

        @NoArgsConstructor
        @Data
        public static class HandbagDTO {
            private Float score;
            private String name;
        }

        @NoArgsConstructor
        @Data
        public static class GenderDTO {
            /**
             * 置信度。
             *
             * 示例值:
             * 0.97989875078201294
             *
             */
            private Float score;
            /***
             * male（男）；female（女）。
             *
             * 示例值:
             * female
             */
            private String name;
        }

        @NoArgsConstructor
        @Data
        public static class AgeDTO {
            private Float score;
            private String name;
        }

        @NoArgsConstructor
        @Data
        public static class UpperWearDTO {
            private Float score;
            private String name;
        }
    }

    @NoArgsConstructor
    @Data
    public static class BoxesDTO {
        /***
         * 边界框置信度。
         *
         * 示例值:
         * 0.88381063938140869
         */
        private Float score;

        /***
         * 边框右下角 y 坐标值。
         *
         * 示例值:
         * 218
         */
        private Integer bottomRightY;
        /***
         * 边框右下角 x 坐标值。
         *
         * 示例值:
         * 584
         */
        private Integer bottomRightX;
        /***
         * 边框左上角 y 坐标值。
         *
         * 示例值:
         * 27
         */
        private Integer topLeftY;
        /***
         * 边框左上角 x 坐标值。
         *
         * 示例值:
         * 36
         */
        private Integer topLeftX;
    }
}
