from dataclasses import dataclass, field
import cadquery as Cq
from nhf.build import Model, TargetKind, target, assembly, submodel
import nhf.touhou.shiki_eiki.rod as MR
import nhf.touhou.shiki_eiki.crown as MC
import nhf.touhou.shiki_eiki.epaulette as ME
import nhf.utils

@dataclass
class Parameters(Model):

    rod: MR.Rod = field(default_factory=lambda: MR.Rod())
    crown: MC.Crown = field(default_factory=lambda: MC.Crown())
    epaulette_ze: ME.Epaulette = field(default_factory=lambda: ME.Epaulette(side="ze"))
    epaulette_hi: ME.Epaulette = field(default_factory=lambda: ME.Epaulette(side="hi"))

    def __post_init__(self):
        super().__init__(name="shiki-eiki")

    @submodel(name="rod")
    def submodel_rod(self) -> Model:
        return self.rod
    @submodel(name="crown")
    def submodel_crown(self) -> Model:
        return self.crown
    @submodel(name="epaulette_ze")
    def submodel_epaulette_ze(self) -> Model:
        return self.epaulette_ze
    @submodel(name="epaulette_hi")
    def submodel_epaulette_hi(self) -> Model:
        return self.epaulette_hi


if __name__ == '__main__':
    import sys

    p = Parameters()
    if len(sys.argv) == 1:
        p.build_all()
        sys.exit(0)