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

import com.github.mustachejava.DefaultMustacheFactory;
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 com.seewo.vcommons.constants.SeewoIntent;
import com.seewo.vcommons.utils.ShellCommandUtils;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import kotlin.Metadata;
import kotlin.Pair;
import kotlin.TuplesKt;
import kotlin.Unit;
import kotlin.collections.CollectionsKt;
import kotlin.collections.MapsKt;
import kotlin.io.CloseableKt;
import kotlin.jvm.functions.Function1;
import kotlin.jvm.internal.Intrinsics;
import kotlin.ranges.RangesKt;
import kotlin.text.StringsKt;

/* JADX INFO: compiled from: DocRenderer.kt */
/* JADX INFO: loaded from: classes.dex */
@Metadata(d1 = {"\u0000\u0086\u0001\n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0010\u0002\n\u0000\n\u0002\u0010 \n\u0002\u0018\u0002\n\u0000\n\u0002\u0010%\n\u0002\u0010\u000e\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0003\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0002\u0010$\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0002\b\u0004\n\u0002\u0018\u0002\n\u0000\u0018\u00002\u00020\u0001B\r\u0012\u0006\u0010\u0002\u001a\u00020\u0003¢\u0006\u0002\u0010\u0004J2\u0010\u0005\u001a\u00020\u00062\f\u0010\u0007\u001a\b\u0012\u0004\u0012\u00020\t0\b2\u0012\u0010\n\u001a\u000e\u0012\u0004\u0012\u00020\f\u0012\u0004\u0012\u00020\r0\u000b2\u0006\u0010\u000e\u001a\u00020\fH\u0002J2\u0010\u000f\u001a\u00020\u00062\f\u0010\u0007\u001a\b\u0012\u0004\u0012\u00020\u00100\b2\u0012\u0010\u0011\u001a\u000e\u0012\u0004\u0012\u00020\f\u0012\u0004\u0012\u00020\u00120\u000b2\u0006\u0010\u000e\u001a\u00020\fH\u0002J\u001e\u0010\u0013\u001a\u00020\u00062\u0006\u0010\u0014\u001a\u00020\f2\u0006\u0010\u0015\u001a\u00020\u00162\u0006\u0010\u0017\u001a\u00020\u0018J\u0018\u0010\u0019\u001a\u00020\f2\u0006\u0010\u001a\u001a\u00020\u001b2\u0006\u0010\u001c\u001a\u00020\fH\u0002J(\u0010\u001d\u001a\u001a\u0012\n\u0012\b\u0012\u0004\u0012\u00020\u00120\b\u0012\n\u0012\b\u0012\u0004\u0012\u00020\r0\b0\u001e2\u0006\u0010\u001f\u001a\u00020 H\u0002Jb\u0010!\u001a&\u0012\u0010\u0012\u000e\u0012\u0004\u0012\u00020\f\u0012\u0004\u0012\u00020\u00100\u000b\u0012\u0010\u0012\u000e\u0012\u0004\u0012\u00020\f\u0012\u0004\u0012\u00020\t0\u000b0\u001e2\f\u0010\"\u001a\b\u0012\u0004\u0012\u00020#0\b2\u0012\u0010\u0011\u001a\u000e\u0012\u0004\u0012\u00020\f\u0012\u0004\u0012\u00020\u00100$2\u0012\u0010\n\u001a\u000e\u0012\u0004\u0012\u00020\f\u0012\u0004\u0012\u00020\t0$H\u0002JP\u0010%\u001a\u001a\u0012\n\u0012\b\u0012\u0004\u0012\u00020\u00100\b\u0012\n\u0012\b\u0012\u0004\u0012\u00020\t0\b0\u001e2\u0006\u0010&\u001a\u00020'2\u0012\u0010\u0011\u001a\u000e\u0012\u0004\u0012\u00020\f\u0012\u0004\u0012\u00020\u00100$2\u0012\u0010\n\u001a\u000e\u0012\u0004\u0012\u00020\f\u0012\u0004\u0012\u00020\t0$H\u0002JP\u0010(\u001a\u001a\u0012\n\u0012\b\u0012\u0004\u0012\u00020\u00100\b\u0012\n\u0012\b\u0012\u0004\u0012\u00020\t0\b0\u001e2\u0006\u0010)\u001a\u00020*2\u0012\u0010\u0011\u001a\u000e\u0012\u0004\u0012\u00020\f\u0012\u0004\u0012\u00020\u00100$2\u0012\u0010\n\u001a\u000e\u0012\u0004\u0012\u00020\f\u0012\u0004\u0012\u00020\t0$H\u0002Jb\u0010+\u001a&\u0012\u0010\u0012\u000e\u0012\u0004\u0012\u00020\f\u0012\u0004\u0012\u00020\u00100\u000b\u0012\u0010\u0012\u000e\u0012\u0004\u0012\u00020\f\u0012\u0004\u0012\u00020\t0\u000b0\u001e2\f\u0010,\u001a\b\u0012\u0004\u0012\u00020\f0\b2\u0012\u0010\u0011\u001a\u000e\u0012\u0004\u0012\u00020\f\u0012\u0004\u0012\u00020\u00100$2\u0012\u0010\n\u001a\u000e\u0012\u0004\u0012\u00020\f\u0012\u0004\u0012\u00020\t0$H\u0002J,\u0010-\u001a\u00020\u00062\u0006\u0010\u0015\u001a\u00020\u00162\f\u0010.\u001a\b\u0012\u0004\u0012\u00020/0\b2\u0006\u0010\u001f\u001a\u00020 2\u0006\u0010\u0017\u001a\u00020\u0018R\u000e\u0010\u0002\u001a\u00020\u0003X\u0082\u0004¢\u0006\u0002\n\u0000¨\u00060"}, d2 = {"Lcom/ifpdos/udi/sdk/service/doc/mkdocs/DocRenderer;", "", "classParser", "Lcom/ifpdos/udi/sdk/service/doc/base/ClassParser;", "(Lcom/ifpdos/udi/sdk/service/doc/base/ClassParser;)V", "addOrUpdateClassDefineWrapper", "", "current", "", "Lcom/ifpdos/udi/sdk/service/doc/mkdocs/ClassDefine;", "classes", "", "", "Lcom/ifpdos/udi/sdk/service/doc/mkdocs/ClassDefineWrapper;", SeewoIntent.KEY_FILE_TYPE, "addOrUpdateEnumDefineWrapper", "Lcom/ifpdos/udi/sdk/service/doc/mkdocs/EnumDefine;", "enums", "Lcom/ifpdos/udi/sdk/service/doc/mkdocs/EnumDefineWrapper;", "createAPIsDocument", "moduleUrl", "comment", "Lcom/ifpdos/udi/sdk/kotlin/comment/parser/CommentDetails;", SeewoIntent.KEY_FILE_TO_3288, "Ljava/io/File;", "getFullUrl", SeewoIntent.KEY_FILE_URI, "Lcom/ifpdos/udi/sdk/service/doc/base/Uri;", "requestClassName", "relevantDefines", "Lkotlin/Pair;", "protocol", "Lcom/ifpdos/udi/sdk/service/doc/mkdocs/ProtocolDefine;", "relevantDefinesOfFields", "fields", "Lcom/ifpdos/udi/sdk/service/doc/mkdocs/FieldInfo;", "", "relevantDefinesOfNotify", "notify", "Lcom/ifpdos/udi/sdk/service/doc/mkdocs/NotifyDefine;", "relevantDefinesOfRequest", "request", "Lcom/ifpdos/udi/sdk/service/doc/mkdocs/RequestDefine;", "relevantDefinesOfTypes", "typeNames", "write", "summaries", "Lcom/ifpdos/udi/sdk/service/doc/mkdocs/ApiSummary;", "doc-mkdocs"}, k = 1, mv = {1, 6, 0}, xi = 48)
public final class DocRenderer {
    private final ClassParser classParser;

    public DocRenderer(ClassParser classParser) {
        Intrinsics.checkNotNullParameter(classParser, "classParser");
        this.classParser = classParser;
    }

    public final void write(CommentDetails comment, List<ApiSummary> summaries, ProtocolDefine protocol, File file) {
        String requestClassName;
        String requestClassName2;
        Intrinsics.checkNotNullParameter(comment, "comment");
        Intrinsics.checkNotNullParameter(summaries, "summaries");
        Intrinsics.checkNotNullParameter(protocol, "protocol");
        Intrinsics.checkNotNullParameter(file, "file");
        HashMap map = new HashMap();
        List<ApiDefine> apis = protocol.getApis();
        ArrayList arrayList = new ArrayList(CollectionsKt.collectionSizeOrDefault(apis, 10));
        Iterator<T> it = apis.iterator();
        while (true) {
            String fullUrl = null;
            if (!it.hasNext()) {
                Pair<List<EnumDefineWrapper>, List<ClassDefineWrapper>> pairRelevantDefines = relevantDefines(protocol);
                List<EnumDefineWrapper> listComponent1 = pairRelevantDefines.component1();
                List<ClassDefineWrapper> listComponent2 = pairRelevantDefines.component2();
                HashMap map2 = map;
                map2.put("comment", comment);
                map2.put("summaries", summaries);
                map2.put("apis", arrayList);
                map2.put("enums", listComponent1);
                map2.put("classes", listComponent2);
                map2.put("lineBreak", "  ");
                map2.put("tap", "    ");
                String strJoinToString$default = CollectionsKt.joinToString$default(StringsKt.split$default((CharSequence) "---\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[]{ShellCommandUtils.COMMAND_LINE_END}, false, 0, 6, (Object) null), ShellCommandUtils.COMMAND_LINE_END, null, null, 0, null, new Function1<String, CharSequence>() { // from class: com.ifpdos.udi.sdk.service.doc.mkdocs.DocRenderer$write$doc$1
                    @Override // kotlin.jvm.functions.Function1
                    public final CharSequence invoke(String it2) {
                        Intrinsics.checkNotNullParameter(it2, "it");
                        return StringsKt.trim((CharSequence) it2).toString();
                    }
                }, 30, null);
                FileOutputStream fileOutputStream = new FileOutputStream(file);
                try {
                    OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream, "utf-8");
                    new DefaultMustacheFactory().compile(new StringReader(strJoinToString$default), "doc").execute(outputStreamWriter, map);
                    outputStreamWriter.flush();
                    Unit unit = Unit.INSTANCE;
                    CloseableKt.closeFinally(fileOutputStream, null);
                    return;
                } finally {
                }
            } else {
                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));
            }
        }
    }

    private final String getFullUrl(Uri uri, String requestClassName) {
        List<String> listSplit$default;
        StringBuilder sb = new StringBuilder();
        IClassWrapper rVar = this.classParser.parser(requestClassName);
        Intrinsics.checkNotNull(rVar);
        List fields$default = IClassWrapper.DefaultImpls.getFields$default(rVar, false, 1, null);
        ArrayList arrayList = new ArrayList(CollectionsKt.collectionSizeOrDefault(fields$default, 10));
        Iterator it = fields$default.iterator();
        while (it.hasNext()) {
            arrayList.add(((IFieldWrapper) it.next()).getName());
        }
        ArrayList arrayList2 = arrayList;
        String query = uri.getQuery();
        if (query != null && (listSplit$default = StringsKt.split$default((CharSequence) query, new String[]{"&"}, false, 0, 6, (Object) null)) != null) {
            for (String str : listSplit$default) {
                sb.append("&");
                List listSplit$default2 = StringsKt.split$default((CharSequence) str, new String[]{"={}"}, false, 0, 6, (Object) null);
                if (arrayList2.contains(listSplit$default2.get(0))) {
                    sb.append((String) listSplit$default2.get(0)).append("={}");
                }
            }
        }
        if (sb.length() > 1) {
            return uri.getPath() + '?' + sb.substring(1);
        }
        return uri.getPath();
    }

    private final Pair<List<EnumDefineWrapper>, List<ClassDefineWrapper>> relevantDefines(ProtocolDefine protocol) {
        ApiDefine apiDefine = protocol.getApis().get(0);
        List<EnumDefine> enums = protocol.getEnums();
        LinkedHashMap linkedHashMap = new LinkedHashMap(RangesKt.coerceAtLeast(MapsKt.mapCapacity(CollectionsKt.collectionSizeOrDefault(enums, 10)), 16));
        for (Object obj : enums) {
            linkedHashMap.put(((EnumDefine) obj).getType(), obj);
        }
        List<ClassDefine> classes = protocol.getClasses();
        LinkedHashMap linkedHashMap2 = new LinkedHashMap(RangesKt.coerceAtLeast(MapsKt.mapCapacity(CollectionsKt.collectionSizeOrDefault(classes, 10)), 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) {
            Pair<List<EnumDefine>, List<ClassDefine>> pairRelevantDefinesOfRequest = relevantDefinesOfRequest(apiDefine.getGet(), linkedHashMap, linkedHashMap2);
            List<EnumDefine> listComponent1 = pairRelevantDefinesOfRequest.component1();
            List<ClassDefine> listComponent2 = pairRelevantDefinesOfRequest.component2();
            addOrUpdateEnumDefineWrapper(listComponent1, linkedHashMap3, RequestLine.METHOD_GET);
            addOrUpdateClassDefineWrapper(listComponent2, linkedHashMap4, RequestLine.METHOD_GET);
        }
        if (apiDefine.getPost() != null) {
            Pair<List<EnumDefine>, List<ClassDefine>> pairRelevantDefinesOfRequest2 = relevantDefinesOfRequest(apiDefine.getPost(), linkedHashMap, linkedHashMap2);
            List<EnumDefine> listComponent12 = pairRelevantDefinesOfRequest2.component1();
            List<ClassDefine> listComponent22 = pairRelevantDefinesOfRequest2.component2();
            addOrUpdateEnumDefineWrapper(listComponent12, linkedHashMap3, "SET");
            addOrUpdateClassDefineWrapper(listComponent22, linkedHashMap4, "SET");
        }
        if (apiDefine.getNotify() != null) {
            Pair<List<EnumDefine>, List<ClassDefine>> pairRelevantDefinesOfNotify = relevantDefinesOfNotify(apiDefine.getNotify(), linkedHashMap, linkedHashMap2);
            List<EnumDefine> listComponent13 = pairRelevantDefinesOfNotify.component1();
            List<ClassDefine> listComponent23 = pairRelevantDefinesOfNotify.component2();
            addOrUpdateEnumDefineWrapper(listComponent13, linkedHashMap3, "NOTIFY");
            addOrUpdateClassDefineWrapper(listComponent23, linkedHashMap4, "NOTIFY");
        }
        for (EnumDefineWrapper enumDefineWrapper : linkedHashMap3.values()) {
            enumDefineWrapper.setUsedBy(CollectionsKt.joinToString$default(enumDefineWrapper.getUsedByList(), ",", null, null, 0, null, null, 62, null));
        }
        for (ClassDefineWrapper classDefineWrapper : linkedHashMap4.values()) {
            classDefineWrapper.setUsedBy(CollectionsKt.joinToString$default(classDefineWrapper.getUsedByList(), ",", null, null, 0, null, null, 62, null));
            classDefineWrapper.setSimpleType(StringsKt.replace$default(StringsKt.replace$default(classDefineWrapper.getSimpleType(), "<", "&lt;", false, 4, (Object) null), ">", "&gt;", false, 4, (Object) null));
        }
        return TuplesKt.to(CollectionsKt.toList(linkedHashMap3.values()), CollectionsKt.toList(linkedHashMap4.values()));
    }

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

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

    private final Pair<List<EnumDefine>, List<ClassDefine>> relevantDefinesOfRequest(RequestDefine request, Map<String, EnumDefine> enums, Map<String, ClassDefine> classes) {
        String responseClassName;
        Pair<Map<String, EnumDefine>, Map<String, ClassDefine>> pairRelevantDefinesOfFields = relevantDefinesOfFields(CollectionsKt.plus((Collection) request.getRequest(), (Iterable) request.getResponse()), enums, classes);
        Map<String, EnumDefine> mapComponent1 = pairRelevantDefinesOfFields.component1();
        Map<String, ClassDefine> mapComponent2 = pairRelevantDefinesOfFields.component2();
        if (Utils.INSTANCE.isListType(request.getResponseClassName())) {
            responseClassName = Utils.INSTANCE.getTypeByList(request.getResponseClassName());
        } else {
            responseClassName = request.getResponseClassName();
        }
        if (!Intrinsics.areEqual(responseClassName, Utils.EMPTY_BODY)) {
            ClassDefine classDefine = classes.get(responseClassName);
            Intrinsics.checkNotNull(classDefine);
            mapComponent2.put(responseClassName, classDefine);
        }
        return TuplesKt.to(CollectionsKt.toList(mapComponent1.values()), CollectionsKt.toList(mapComponent2.values()));
    }

    private final Pair<Map<String, EnumDefine>, Map<String, ClassDefine>> relevantDefinesOfFields(List<FieldInfo> fields, Map<String, EnumDefine> enums, Map<String, ClassDefine> classes) {
        ArrayList arrayList = new ArrayList();
        Iterator<T> it = fields.iterator();
        while (it.hasNext()) {
            String type = ((FieldInfo) it.next()).getType();
            if (StringsKt.contains$default((CharSequence) type, (CharSequence) "<", false, 2, (Object) null)) {
                arrayList.addAll(Utils.INSTANCE.getGenericParameterTypes(type));
            } else {
                arrayList.add(type);
            }
        }
        return relevantDefinesOfTypes(arrayList, enums, classes);
    }

    private final Pair<Map<String, EnumDefine>, Map<String, ClassDefine>> relevantDefinesOfTypes(List<String> typeNames, Map<String, EnumDefine> enums, Map<String, ClassDefine> classes) {
        LinkedHashMap linkedHashMap = new LinkedHashMap();
        LinkedHashMap linkedHashMap2 = new LinkedHashMap();
        for (String str : typeNames) {
            if (str.length() != 0 && !Intrinsics.areEqual(str, "EmptyBody")) {
                if (enums.containsKey(str)) {
                    EnumDefine enumDefine = enums.get(str);
                    Intrinsics.checkNotNull(enumDefine);
                    linkedHashMap.putIfAbsent(str, enumDefine);
                } else if (classes.containsKey(str)) {
                    ClassDefine classDefine = classes.get(str);
                    Intrinsics.checkNotNull(classDefine);
                    ClassDefine classDefine2 = classDefine;
                    linkedHashMap2.putIfAbsent(str, classDefine2);
                    Pair<Map<String, EnumDefine>, Map<String, ClassDefine>> pairRelevantDefinesOfFields = relevantDefinesOfFields(classDefine2.getFields(), enums, classes);
                    Map<String, EnumDefine> mapComponent1 = pairRelevantDefinesOfFields.component1();
                    Map<String, ClassDefine> mapComponent2 = pairRelevantDefinesOfFields.component2();
                    linkedHashMap.putAll(mapComponent1);
                    linkedHashMap2.putAll(mapComponent2);
                }
            }
        }
        return TuplesKt.to(linkedHashMap, linkedHashMap2);
    }

    private final Pair<List<EnumDefine>, List<ClassDefine>> relevantDefinesOfNotify(NotifyDefine notify, Map<String, EnumDefine> enums, Map<String, ClassDefine> classes) {
        Pair<Map<String, EnumDefine>, Map<String, ClassDefine>> pairRelevantDefinesOfFields = relevantDefinesOfFields(notify.getNotify(), enums, classes);
        Map<String, EnumDefine> mapComponent1 = pairRelevantDefinesOfFields.component1();
        Map<String, ClassDefine> mapComponent2 = pairRelevantDefinesOfFields.component2();
        String notifyClassName = notify.getNotifyClassName();
        if (!Intrinsics.areEqual(notifyClassName, "EmptyBody") && notifyClassName.length() > 0) {
            if (classes.containsKey(notifyClassName)) {
                ClassDefine classDefine = classes.get(notifyClassName);
                Intrinsics.checkNotNull(classDefine);
                mapComponent2.putIfAbsent(notifyClassName, classDefine);
            }
            if (enums.containsKey(notifyClassName)) {
                EnumDefine enumDefine = enums.get(notifyClassName);
                Intrinsics.checkNotNull(enumDefine);
                mapComponent1.putIfAbsent(notifyClassName, enumDefine);
            }
        }
        return TuplesKt.to(CollectionsKt.toList(mapComponent1.values()), CollectionsKt.toList(mapComponent2.values()));
    }

    public final void createAPIsDocument(String moduleUrl, CommentDetails comment, File file) {
        String strReplace$default;
        Intrinsics.checkNotNullParameter(moduleUrl, "moduleUrl");
        Intrinsics.checkNotNullParameter(comment, "comment");
        Intrinsics.checkNotNullParameter(file, "file");
        HashMap map = new HashMap();
        HashMap map2 = map;
        map2.put("target", moduleUrl);
        map2.put("commentTitle", comment.getSummary());
        List listSplit$default = StringsKt.split$default((CharSequence) comment.getDescription(), new String[]{ShellCommandUtils.COMMAND_LINE_END}, false, 0, 6, (Object) null);
        if (!listSplit$default.isEmpty()) {
            strReplace$default = StringsKt.replace$default(StringsKt.replace$default((String) CollectionsKt.last(listSplit$default), "[", "", false, 4, (Object) null), "]", "", false, 4, (Object) null);
        } else {
            strReplace$default = "";
        }
        map2.put("commentDescription", strReplace$default);
        String strJoinToString$default = CollectionsKt.joinToString$default(StringsKt.split$default((CharSequence) "---\ntarget: \"{{target}}\"\ntitle: \"{{commentTitle}}\"\nhide:\n  - toc\n---\n{{commentDescription}}\n", new String[]{ShellCommandUtils.COMMAND_LINE_END}, false, 0, 6, (Object) null), ShellCommandUtils.COMMAND_LINE_END, null, null, 0, null, new Function1<String, CharSequence>() { // from class: com.ifpdos.udi.sdk.service.doc.mkdocs.DocRenderer$createAPIsDocument$apisDocument$1
            @Override // kotlin.jvm.functions.Function1
            public final CharSequence invoke(String it) {
                Intrinsics.checkNotNullParameter(it, "it");
                return StringsKt.trim((CharSequence) it).toString();
            }
        }, 30, null);
        FileOutputStream fileOutputStream = new FileOutputStream(file);
        try {
            OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream, "utf-8");
            new DefaultMustacheFactory().compile(new StringReader(strJoinToString$default), "doc").execute(outputStreamWriter, map);
            outputStreamWriter.flush();
            Unit unit = Unit.INSTANCE;
            CloseableKt.closeFinally(fileOutputStream, null);
        } finally {
        }
    }
}
