package com.heaven7.java.data.mediator.compiler.generator;

import com.heaven7.java.data.mediator.compiler.GlobalConfig;
import com.heaven7.java.data.mediator.compiler.ProcessorPrinter;
import com.heaven7.java.data.mediator.compiler.util.Util;
import com.squareup.javapoet.*;

import javax.annotation.processing.Filer;
import javax.lang.model.element.Modifier;
import java.io.IOException;

import static com.heaven7.java.data.mediator.compiler.DataMediatorConstants.*;

/**
 * Created by heaven7 on 2017/9/14 0014.
 */
public class StaticLoaderGenerator {

    public static final String CNAME = PKG_DM_INTERNAL + "." + SN_STATIC_LOADER;
    private static final String TAG  =  "StaticLoaderGenerator";

    public static boolean generateStaticCodeLoader(Filer filer, ProcessorPrinter pp){
        CodeBlock.Builder staticBuilder = CodeBlock.builder()
                //GlobalSetting.getgetDefault().setGsonVersion(xxx)
                .add("$T.getDefault().setGsonVersion($L);\n", ClassName.get(PKG_PROP, SN_GLOBAL_SETTING),
                        GlobalConfig.getInstance().getVersion());

        TypeSpec typeSpec = TypeSpec.classBuilder(SN_STATIC_LOADER)
                .addModifiers(Modifier.PUBLIC, Modifier.FINAL)
                .addStaticBlock(staticBuilder.build())
                .addJavadoc(CodeBlock.of(DOC))
                .build();
        try {
            JavaFile javaFile = JavaFile.builder(PKG_DM_INTERNAL, typeSpec)
                    .build();
           // System.out.println(javaFile.toString());
            javaFile.writeTo(filer);
        } catch (IOException e) {
            pp.error(TAG, "generateSharedProperties", Util.toString(e));
            return false;
        }
        return true;
    }

}