package com.ifpdos.udi.sdk.service.doc.mkdocs;

import com.ifpdos.sdk.httpd.binder.aidl.RequestLine;
import com.ifpdos.udi.sdk.kotlin.comment.parser.CommentDetails;
import com.ifpdos.udi.sdk.service.doc.base.ClassParser;
import com.ifpdos.udi.sdk.service.doc.base.IClassWrapper;
import com.ifpdos.udi.sdk.service.doc.base.IFieldWrapper;
import com.ifpdos.udi.sdk.service.doc.base.Uri;
import com.ifpdos.udi.sdk.service.doc.base.Utils;
import f.a.y.a;
import g.c0.g;
import g.h0.c.l;
import g.i;
import g.k;
import g.m0.f;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

/* JADX INFO: compiled from: DocRenderer.kt */
/* JADX INFO: loaded from: classes.dex */
@i
public final class DocRenderer {
    private final ClassParser classParser;

    public DocRenderer(ClassParser classParser) {
        l.f(classParser, "classParser");
        this.classParser = classParser;
    }

    private final void addOrUpdateClassDefineWrapper(List<ClassDefine> list, Map<String, ClassDefineWrapper> map, String str) {
        List<String> usedByList;
        for (ClassDefine classDefine : list) {
            if (map.containsKey(classDefine.getSimpleType())) {
                ClassDefineWrapper classDefineWrapper = map.get(classDefine.getSimpleType());
                if (classDefineWrapper != null && (usedByList = classDefineWrapper.getUsedByList()) != null) {
                    usedByList.add(str);
                }
            } else {
                ClassDefineWrapper classDefineWrapper2 = new ClassDefineWrapper(classDefine);
                classDefineWrapper2.getUsedByList().add(str);
                map.put(classDefineWrapper2.getSimpleType(), classDefineWrapper2);
            }
        }
    }

    private final void addOrUpdateEnumDefineWrapper(List<EnumDefine> list, Map<String, EnumDefineWrapper> map, String str) {
        List<String> usedByList;
        for (EnumDefine enumDefine : list) {
            if (map.containsKey(enumDefine.getSimpleType())) {
                EnumDefineWrapper enumDefineWrapper = map.get(enumDefine.getSimpleType());
                if (enumDefineWrapper != null && (usedByList = enumDefineWrapper.getUsedByList()) != null) {
                    usedByList.add(str);
                }
            } else {
                EnumDefineWrapper enumDefineWrapper2 = new EnumDefineWrapper(enumDefine);
                enumDefineWrapper2.getUsedByList().add(str);
                map.put(enumDefineWrapper2.getSimpleType(), enumDefineWrapper2);
            }
        }
    }

    private final String getFullUrl(Uri uri, String str) {
        StringBuilder sb = new StringBuilder();
        IClassWrapper rVar = this.classParser.parser(str);
        l.c(rVar);
        List<IFieldWrapper> fields = rVar.getFields();
        ArrayList arrayList = new ArrayList(a.C(fields, 10));
        Iterator<T> it = fields.iterator();
        while (it.hasNext()) {
            arrayList.add(((IFieldWrapper) it.next()).getName());
        }
        String query = uri.getQuery();
        if (query != null) {
            for (String str2 : f.E(query, new String[]{"&"}, false, 0, 6)) {
                sb.append("&");
                List listE = f.E(str2, new String[]{"={}"}, false, 0, 6);
                if (arrayList.contains(listE.get(0))) {
                    sb.append((String) listE.get(0));
                    sb.append("={}");
                }
            }
        }
        if (sb.length() <= 1) {
            return uri.getPath();
        }
        return uri.getPath() + '?' + sb.substring(1);
    }

    private final k<List<EnumDefineWrapper>, List<ClassDefineWrapper>> relevantDefines(ProtocolDefine protocolDefine) {
        ApiDefine apiDefine = protocolDefine.getApis().get(0);
        List<EnumDefine> enums = protocolDefine.getEnums();
        int iX0 = a.x0(a.C(enums, 10));
        if (iX0 < 16) {
            iX0 = 16;
        }
        LinkedHashMap linkedHashMap = new LinkedHashMap(iX0);
        for (Object obj : enums) {
            linkedHashMap.put(((EnumDefine) obj).getType(), obj);
        }
        List<ClassDefine> classes = protocolDefine.getClasses();
        int iX02 = a.x0(a.C(classes, 10));
        LinkedHashMap linkedHashMap2 = new LinkedHashMap(iX02 >= 16 ? iX02 : 16);
        for (Object obj2 : classes) {
            linkedHashMap2.put(((ClassDefine) obj2).getType(), obj2);
        }
        Map<String, EnumDefineWrapper> linkedHashMap3 = new LinkedHashMap<>();
        Map<String, ClassDefineWrapper> linkedHashMap4 = new LinkedHashMap<>();
        if (apiDefine.getGet() != null) {
            k<List<EnumDefine>, List<ClassDefine>> kVarRelevantDefinesOfRequest = relevantDefinesOfRequest(apiDefine.getGet(), linkedHashMap, linkedHashMap2);
            List<EnumDefine> list = kVarRelevantDefinesOfRequest.f4139b;
            List<ClassDefine> list2 = kVarRelevantDefinesOfRequest.f4140e;
            addOrUpdateEnumDefineWrapper(list, linkedHashMap3, RequestLine.METHOD_GET);
            addOrUpdateClassDefineWrapper(list2, linkedHashMap4, RequestLine.METHOD_GET);
        }
        if (apiDefine.getPost() != null) {
            k<List<EnumDefine>, List<ClassDefine>> kVarRelevantDefinesOfRequest2 = relevantDefinesOfRequest(apiDefine.getPost(), linkedHashMap, linkedHashMap2);
            List<EnumDefine> list3 = kVarRelevantDefinesOfRequest2.f4139b;
            List<ClassDefine> list4 = kVarRelevantDefinesOfRequest2.f4140e;
            addOrUpdateEnumDefineWrapper(list3, linkedHashMap3, "SET");
            addOrUpdateClassDefineWrapper(list4, linkedHashMap4, "SET");
        }
        if (apiDefine.getNotify() != null) {
            k<List<EnumDefine>, List<ClassDefine>> kVarRelevantDefinesOfNotify = relevantDefinesOfNotify(apiDefine.getNotify(), linkedHashMap, linkedHashMap2);
            List<EnumDefine> list5 = kVarRelevantDefinesOfNotify.f4139b;
            List<ClassDefine> list6 = kVarRelevantDefinesOfNotify.f4140e;
            addOrUpdateEnumDefineWrapper(list5, linkedHashMap3, "NOTIFY");
            addOrUpdateClassDefineWrapper(list6, linkedHashMap4, "NOTIFY");
        }
        for (EnumDefineWrapper enumDefineWrapper : linkedHashMap3.values()) {
            enumDefineWrapper.setUsedBy(g.r(enumDefineWrapper.getUsedByList(), ",", null, null, 0, null, null, 62));
        }
        for (ClassDefineWrapper classDefineWrapper : linkedHashMap4.values()) {
            classDefineWrapper.setUsedBy(g.r(classDefineWrapper.getUsedByList(), ",", null, null, 0, null, null, 62));
            classDefineWrapper.setSimpleType(f.A(f.A(classDefineWrapper.getSimpleType(), "<", "&lt;", false, 4), ">", "&gt;", false, 4));
        }
        return new k<>(g.F(linkedHashMap3.values()), g.F(linkedHashMap4.values()));
    }

    private final k<Map<String, EnumDefine>, Map<String, ClassDefine>> relevantDefinesOfFields(List<FieldInfo> list, Map<String, EnumDefine> map, Map<String, ClassDefine> map2) {
        ArrayList arrayList = new ArrayList();
        Iterator<T> it = list.iterator();
        while (it.hasNext()) {
            String type = ((FieldInfo) it.next()).getType();
            if (f.b(type, "<", false, 2)) {
                arrayList.addAll(Utils.INSTANCE.getGenericParameterTypes(type));
            } else {
                arrayList.add(type);
            }
        }
        return relevantDefinesOfTypes(arrayList, map, map2);
    }

    private final k<List<EnumDefine>, List<ClassDefine>> relevantDefinesOfNotify(NotifyDefine notifyDefine, Map<String, EnumDefine> map, Map<String, ClassDefine> map2) {
        k<Map<String, EnumDefine>, Map<String, ClassDefine>> kVarRelevantDefinesOfFields = relevantDefinesOfFields(notifyDefine.getNotify(), map, map2);
        Map<String, EnumDefine> map3 = kVarRelevantDefinesOfFields.f4139b;
        Map<String, ClassDefine> map4 = kVarRelevantDefinesOfFields.f4140e;
        String notifyClassName = notifyDefine.getNotifyClassName();
        if (!l.a(notifyClassName, "EmptyBody")) {
            if (notifyClassName.length() > 0) {
                if (map2.containsKey(notifyClassName)) {
                    ClassDefine classDefine = map2.get(notifyClassName);
                    l.c(classDefine);
                    map4.putIfAbsent(notifyClassName, classDefine);
                }
                if (map.containsKey(notifyClassName)) {
                    EnumDefine enumDefine = map.get(notifyClassName);
                    l.c(enumDefine);
                    map3.putIfAbsent(notifyClassName, enumDefine);
                }
            }
        }
        return new k<>(g.F(map3.values()), g.F(map4.values()));
    }

    private final k<List<EnumDefine>, List<ClassDefine>> relevantDefinesOfRequest(RequestDefine requestDefine, Map<String, EnumDefine> map, Map<String, ClassDefine> map2) {
        k<Map<String, EnumDefine>, Map<String, ClassDefine>> kVarRelevantDefinesOfFields = relevantDefinesOfFields(g.z(requestDefine.getRequest(), requestDefine.getResponse()), map, map2);
        Map<String, EnumDefine> map3 = kVarRelevantDefinesOfFields.f4139b;
        Map<String, ClassDefine> map4 = kVarRelevantDefinesOfFields.f4140e;
        if (!l.a(requestDefine.getResponseClassName(), Utils.EMPTY_BODY)) {
            String responseClassName = requestDefine.getResponseClassName();
            ClassDefine classDefine = map2.get(requestDefine.getResponseClassName());
            l.c(classDefine);
            map4.put(responseClassName, classDefine);
        }
        return new k<>(g.F(map3.values()), g.F(map4.values()));
    }

    private final k<Map<String, EnumDefine>, Map<String, ClassDefine>> relevantDefinesOfTypes(List<String> list, Map<String, EnumDefine> map, Map<String, ClassDefine> map2) {
        LinkedHashMap linkedHashMap = new LinkedHashMap();
        LinkedHashMap linkedHashMap2 = new LinkedHashMap();
        for (String str : list) {
            if (!(str.length() == 0) && !l.a(str, "EmptyBody")) {
                if (map.containsKey(str)) {
                    EnumDefine enumDefine = map.get(str);
                    l.c(enumDefine);
                    linkedHashMap.putIfAbsent(str, enumDefine);
                } else if (map2.containsKey(str)) {
                    ClassDefine classDefine = map2.get(str);
                    l.c(classDefine);
                    ClassDefine classDefine2 = classDefine;
                    linkedHashMap2.putIfAbsent(str, classDefine2);
                    k<Map<String, EnumDefine>, Map<String, ClassDefine>> kVarRelevantDefinesOfFields = relevantDefinesOfFields(classDefine2.getFields(), map, map2);
                    Map<String, EnumDefine> map3 = kVarRelevantDefinesOfFields.f4139b;
                    Map<String, ClassDefine> map4 = kVarRelevantDefinesOfFields.f4140e;
                    linkedHashMap.putAll(map3);
                    linkedHashMap2.putAll(map4);
                }
            }
        }
        return new k<>(linkedHashMap, linkedHashMap2);
    }

    public final void createAPIsDocument(CommentDetails commentDetails, File file) throws IOException {
        l.f(commentDetails, "comment");
        l.f(file, "file");
        HashMap map = new HashMap();
        map.put("commentTitle", commentDetails.getSummary());
        List listE = f.E(commentDetails.getDescription(), new String[]{"\n"}, false, 0, 6);
        map.put("commentDescription", listE.isEmpty() ^ true ? f.A(f.A((String) g.t(listE), "[", "", false, 4), "]", "", false, 4) : "");
        String name = file.getName();
        l.e(name, "file.name");
        List listE2 = f.E(name, new String[]{"_"}, false, 0, 6);
        StringBuilder sbB = d.b.a.a.a.B("/");
        sbB.append((String) listE2.get(1));
        sbB.append("/");
        sbB.append((String) f.E((CharSequence) listE2.get(2), new String[]{"."}, false, 0, 6).get(0));
        String string = sbB.toString();
        l.e(string, "documentTarget.toString()");
        map.put("target", string);
        String strR = g.r(f.E("---\ntarget: \"{{target}}\"\ntitle: \"{{commentTitle}}\"\nhide:\n  - toc\n---\n{{commentDescription}}\n", new String[]{"\n"}, false, 0, 6), "\n", null, null, 0, null, DocRenderer$createAPIsDocument$apisDocument$1.INSTANCE, 30);
        FileOutputStream fileOutputStream = new FileOutputStream(file);
        try {
            OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream, "utf-8");
            new d.e.a.f().a(new StringReader(strR), "doc").g(outputStreamWriter, map);
            outputStreamWriter.flush();
            a.B(fileOutputStream, null);
        } finally {
        }
    }

    public final void write(CommentDetails commentDetails, List<ApiSummary> list, ProtocolDefine protocolDefine, File file) throws IOException {
        String requestClassName;
        String requestClassName2;
        l.f(commentDetails, "comment");
        l.f(list, "summaries");
        l.f(protocolDefine, "protocol");
        l.f(file, "file");
        HashMap map = new HashMap();
        List<ApiDefine> apis = protocolDefine.getApis();
        ArrayList arrayList = new ArrayList(a.C(apis, 10));
        Iterator<T> it = apis.iterator();
        while (true) {
            String fullUrl = null;
            if (it.hasNext()) {
                ApiDefine apiDefine = (ApiDefine) it.next();
                RequestDefine get = apiDefine.getGet();
                String fullUrl2 = (get == null || (requestClassName2 = get.getRequestClassName()) == null) ? null : getFullUrl(apiDefine.getUri(), requestClassName2);
                RequestDefine post = apiDefine.getPost();
                if (post != null && (requestClassName = post.getRequestClassName()) != null) {
                    fullUrl = getFullUrl(apiDefine.getUri(), requestClassName);
                }
                arrayList.add(new ApiDefineWrapper(apiDefine, fullUrl2, fullUrl));
            } else {
                k<List<EnumDefineWrapper>, List<ClassDefineWrapper>> kVarRelevantDefines = relevantDefines(protocolDefine);
                List<EnumDefineWrapper> list2 = kVarRelevantDefines.f4139b;
                List<ClassDefineWrapper> list3 = kVarRelevantDefines.f4140e;
                map.put("comment", commentDetails);
                map.put("summaries", list);
                map.put("apis", arrayList);
                map.put("enums", list2);
                map.put("classes", list3);
                map.put("lineBreak", "  ");
                map.put("tap", "    ");
                String strR = g.r(f.E("---\n{{#apis}}\n{{#summaries}}\n\ntarget: \"{{&uri}}\"\nendpoint: true\ntitle: \"{{&summary}}\"\naudit:\n    - linjiawei3046\n    - guorongfei\n    - hedelong\n    - linxuan\nhide:\n    - toc\n\n{{#hasPermission}}\n    permission:\n    {{#isGetSupport}}{{&tap}}get: {{&getPermission}} {{/isGetSupport}}\n    {{#isPostSupport}}{{&tap}}set: {{&postPermission}} {{/isPostSupport}}\n    {{#isNotifySupport}}{{&tap}}notify: {{&notifyPermission}} {{/isNotifySupport}}\n{{/hasPermission}}\n\n{{#hasAlso}}\n    also:\n    {{#also}}\n        {{&tap}}- \"{{&see}}\"\n    {{/also}}\n{{/hasAlso}}\n\n{{#hasDeprecated}}\n    deprecated: \"{{&deprecated}}\"\n{{/hasDeprecated}}\n\n{{#api.alias}}\n    alias: \"{{&api.alias}}\"\n{{/api.alias}}\n\n{{#apply}}\n    apply:\n    {{&tap}}UDI:\n{{/apply}}\n\n{{#hasOpensdks}}\nopensdk:\n    {{#opensdks}}\n    {{&tap}}{{&method}}: \"{{&api}}\"\n    {{/opensdks}}\n{{/hasOpensdks}}\n\n{{#hasFunctionBlocks}}\nfunblk:\n    {{#functionBlocks}}\n    {{&tap}}- \"{{.}}\"\n    {{/functionBlocks}}\n{{/hasFunctionBlocks}}\n\nclassification: \"{{&classification}}\"\n\n{{#hasDepends}}\ndepends: '{{&dependsString}}'\n{{/hasDepends}}\n\n{{/summaries}}\n{{/apis}}\n---\n\n{{#apis}}\n\n# {{&api.comment.summary}}\n\n{{&description}}\n\n{{#isGetSupport}}\n<!--GET BEGIN-->\n{{lineBreak}}\n## 获取\n\n    ### 接口\n    \n    ```http\n    GET {{&getUrl}}\n    ```\n\n    {{#hasGetRequest}}\n        ### URI 参数\n        | Name     | Required | In      | Type                                  | Description                                                                                                                |\n        | -------- | -------- | ------- | ------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |\n        {{#getRequestWrapper}}\n            |{{&filed.name}}| {{&isRequired}} |{{pos}}|{{jsonType}}|{{&filed.description}}|\n        {{/getRequestWrapper}}\n    {{/hasGetRequest}}\n\n    ### 响应\n    \n        | Status                    | Type                              | Description                  |\n        | ------------------------- | --------------------------------- | ---------------------------- |\n        |`200 OK`|{{getResponseClassName}}||\n        |`401 Unauthorized`||`token` 非法，或者无访问权限|\n    \n    ### 示例\n    \n    {{&api.get.demoCode}}\n<!-- GET END -->  \n{{/isGetSupport}}\n\n{{#isPostSupport}}\n<!--SET BEGIN-->\n{{lineBreak}}\n## 设置\n\n    ### 接口\n\n    ```http\n    POST {{&postUrl}}\n    ```\n\n    {{#hasPostRequest}}\n        {{#isUriParam}}\n            ### URI 参数 \n            | Name   | Required | In     | Type                                  | Description |\n            | ------ | -------- | ------ | ------------------------------------- | ----------- |\n            {{#postRequestWrapper}}\n                | {{&filed.name}} | {{isRequired}} | {{&pos}} | {{&jsonType}} |{{&filed.description}} |\n            {{/postRequestWrapper}}\n        {{/isUriParam}}\n\n        {{^isUriParam}}\n          ### 请求内容 \n          | Name       | Required | Type   | Description    |\n          | ---------- | -------- | ------ | -------------- |\n          {{#postRequestWrapper}}\n              | {{&filed.name}} | {{isRequired}} | {{&jsonType}} | {{&filed.description}} | \n          {{/postRequestWrapper}}\n        {{/isUriParam}}\n    {{/hasPostRequest}}\n    \n    {{^hasPostResponse}}\n    ### 响应\n    \n    | Status                    | Type | Description                   |\n    | ------------------------- | ---- | ----------------------------- |\n    | `200 OK`                |  {{postResponseDataClass}}  |                             |\n    | `401 Unauthorized`        |      |  `token` 非法，或者无访问权限|\n    {{/hasPostResponse}}\n   \n    ### 示例\n    \n    {{&api.post.demoCode}}\n<!--SET END-->\n{{/isPostSupport}}\n\n{{#isNotifySupport}}\n<!--NOTIFY BEGIN-->\n{{lineBreak}}\n## 监听\n    ### 接口\n\n    ```HTTP\n    POST /v1/event/add/single\n\n    {\n        {{tap}}\"uuid\": \"{uuid}\",\n        {{tap}}\"event\": \"{{&api.uri.path}}\"\n    }\n    ```\n    {{#hasNotify}}\n        ### 请求内容\n        | Name   | Required | Type                                | Description                                                  |\n        | ------ | -------- | ----------------------------------- | ------------------------------------------------------------ |\n        |`uuid`|`true`|`string`||\n        |`event`|`true`|`string`||\n    {{/hasNotify}}\n\n    ### 通知内容\n    | Status             | Type | Description                  |\n    | ------------------ | ---- | ---------------------------- |\n    | `200 OK`           |  {{notifyDataClass}} | 监听成功       |\n    | `401 Unauthorized` |      | `token` 非法，或者无访问权限 |\n\n    ### 示例\n    {{&api.notify.demoCode}}\n<!--NOTIFY END-->\n{{/isNotifySupport}}\n\n<!--DEPEND BEGIN-->\n\n{{#hasDepends}}\n<!-- ONLINE BEGIN -->\n## 系统依赖\n\n|方法|库|接口|功能|\n|-|-|-|-|\n{{#depends}}\n| {{&method}} | {{&lib}} | {{&api}} | {{&platform}} {{&description}} |\n{{/depends}}\n<!-- ONLINE END -->\n{{/hasDepends}}\n\n<!--DEPEND END-->\n\n\n{{/apis}}\n\n{{#classes}}\n<!--STRUCT BEGIN, USED BY:{{usedBy}}-->\n    ## {{&simpleType}}\n    {{#comment}}\n        {{&comment}}\n    {{/comment}}\n    {{lineBreak}}\n    |Name|Type|Description|  \n    |---|---|---|\n    {{#fields}}\n        | {{&name}} |{{&link}}|  {{&description}} |  \n    {{/fields}}\n<!--STRUCT END-->\n{{/classes}}\n\n{{#enums}}\n<!--STRUCT BEGIN, USED BY:{{usedBy}}-->\n    ## {{&simpleType}}\n    {{#comment}}\n        {{&comment}}\n    {{/comment}}\n    {{lineBreak}}\n    |Name|Description|  \n    |---|---|  \n    {{#fields}}\n        | {{&name}} | {{&description}} |  \n    {{/fields}}\n<!--STRUCT END-->\n{{/enums}}\n", new String[]{"\n"}, false, 0, 6), "\n", null, null, 0, null, DocRenderer$write$doc$1.INSTANCE, 30);
                FileOutputStream fileOutputStream = new FileOutputStream(file);
                try {
                    OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream, "utf-8");
                    new d.e.a.f().a(new StringReader(strR), "doc").g(outputStreamWriter, map);
                    outputStreamWriter.flush();
                    a.B(fileOutputStream, null);
                    return;
                } finally {
                }
            }
        }
    }
}
