import { defineMixin } from '../vue'
import { addStyle, deepMerge, addUnit, trim } from '../function/index'

export const style = defineMixin({
    props: {
        // flex排列方式
        flexDirection: {
            type: String,
            default: ''
        },
        // flex-direction的简写
        fd: {
            type: String,
            default: ''
        },
        // 展示类型
        display: {
            type: String,
            default: ''
        },
        // display简写
        d: {
            type: String,
            default: ''
        },
        // 主轴排列方式
        justifyContent: {
            type: String,
            default: ''
        },
        // justifyContent的简写
        jc: {
            type: String,
            default: ''
        },
        // 纵轴排列方式
        alignItems: {
            type: String,
            default: ''
        },
        // align-items的简写
        ai: {
            type: String,
            default: ''
        },
        color: {
            type: String,
            default: ''
        },
        // color简写
        c: {
            type: String,
            default: ''
        },
        // 字体大小
        fontSize: {
            type: [String, Number],
            default: 0
        },
        // font-size简写
        fs: {
            type: [String, Number],
            default: ''
        },
        margin: {
            type: [String, Number],
            default: 0
        },
        // margin简写
        m: {
            type: [String, Number],
            default: 0
        },
        // margin-top
        marginTop: {
            type: [String, Number],
            default: 0
        },
        // margin-top简写
        mt: {
            type: [String, Number],
            default: 0
        },
        // margin-right
        marginRight: {
            type: [String, Number],
            default: 0
        },
        // margin-right简写
        mr: {
            type: [String, Number],
            default: 0
        },
        // margin-bottom
        marginBottom: {
            type: [String, Number],
            default: 0
        },
        // margin-bottom简写
        mb: {
            type: [String, Number],
            default: 0
        },
        // margin-left
        marginLeft: {
            type: [String, Number],
            default: 0
        },
        // margin-left简写
        ml: {
            type: [String, Number],
            default: 0
        },
        // padding-left
        paddingLeft: {
            type: [String, Number],
            default: 0
        },
        // padding-left简写
        pl: {
            type: [String, Number],
            default: 0
        },
        // padding-top
        paddingTop: {
            type: [String, Number],
            default: 0
        },
        // padding-top简写
        pt: {
            type: [String, Number],
            default: 0
        },
        // padding-right
        paddingRight: {
            type: [String, Number],
            default: 0
        },
        // padding-right简写
        pr: {
            type: [String, Number],
            default: 0
        },
        // padding-bottom
        paddingBottom: {
            type: [String, Number],
            default: 0
        },
        // padding-bottom简写
        pb: {
            type: [String, Number],
            default: 0
        },
        // border-radius
        borderRadius: {
            type: [String, Number],
            default: 0
        },
        // border-radius简写
        radius: {
            type: [String, Number],
            default: 0
        },
        // transform
        transform: {
            type: String,
            default: ''
        },
        // 定位
        position: {
            type: String,
            default: ''
        },
        // position简写
        pos: {
            type: String,
            default: ''
        },
        // 宽度
        width: {
            type: [String, Number],
            default: null
        },
        // width简写
        w: {
            type: [String, Number],
            default: null
        },
        // 高度
        height: {
            type: [String, Number],
            default: null
        },
        // height简写
        h: {
            type: [String, Number],
            default: null
        },
        top: {
            type: [String, Number],
            default: 0
        },
        right: {
            type: [String, Number],
            default: 0
        },
        bottom: {
            type: [String, Number],
            default: 0
        },
        left: {
            type: [String, Number],
            default: 0
        }
    },
    computed: {
        viewStyle() {
            const style = {}
            const addStyleTmp = addStyle(this.width || this.w)
                && (style.width = addStyle(this.width || this.w))(this.height || this.h)
                && (style.height = addStyle(this.height || this.h))(this.margin || this.m)
                && (style.margin = addStyle(this.margin || this.m))(this.marginTop || this.mt)
                && (style.marginTop = addStyle(this.marginTop || this.mt))(this.marginRight || this.mr)
                && (style.marginRight = addStyle(this.marginRight || this.mr))(this.marginBottom || this.mb)
                && (style.marginBottom = addStyle(this.marginBottom || this.mb))(this.marginLeft || this.ml)
                && (style.marginLeft = addStyle(this.marginLeft || this.ml))(this.padding || this.p)
                && (style.padding = addStyle(this.padding || this.p))(this.paddingTop || this.pt)
                && (style.paddingTop = addStyle(this.paddingTop || this.pt))(this.paddingRight || this.pr)
                && (style.paddingRight = addStyle(this.paddingRight || this.pr))(this.paddingBottom || this.pb)
                && (style.paddingBottom = addStyle(this.paddingBottom || this.pb))(this.paddingLeft || this.pl)
                && (style.paddingLeft = addStyle(this.paddingLeft || this.pl))(this.color || this.c)
                && (style.color = this.color || this.c)(this.fontSize || this.fs)
                && (style.fontSize = this.fontSize || this.fs)(this.borderRadius || this.radius)
                && (style.borderRadius = this.borderRadius || this.radius)(this.position || this.pos)
                && (this.position = this.position || this.pos)(this.flexDirection || this.fd)
                && (this.flexDirection = this.flexDirection || this.fd)(this.justifyContent || jc)
                && (this.justifyContent = this.justifyContent || jc)(this.alignItems || ai)
                && (this.alignItems = this.alignItems || ai)
            return deepMerge(style, addStyleTmp(this.customStyle))
        }
    },
    methods: {
        // 获取margin或者padding的单位，比如padding: 0 20转为padding: 0 20px
        getUnit(unit = '') {
            // 取出两端空格，分隔成数组，再对数组的每个元素添加单位，最后再合并成字符串
            return trim(unit).split(' ').map((item) => addUnit(item)).join(' ')
        }
    }
})
