import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { NgbModule, NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap';
import { FormsModule } from '@angular/forms';
import { CdkTableModule } from '@angular/cdk/table';
import { DragDropModule } from '@angular/cdk/drag-drop';
import { ReactiveFormsModule } from '@angular/forms';
import { MarkdownModule } from 'ngx-markdown';
import { NgxEditorModule } from 'ngx-editor';
import { TranslateModule, TranslatePipe } from '@ngx-translate/core';

// Material Design
import { MatSlideToggleModule } from '@angular/material/slide-toggle';
import { MatSelectModule } from '@angular/material/select';
import { MatInputModule } from '@angular/material/input';
import { MatFormFieldModule } from '@angular/material/form-field';
import { MatTabsModule } from '@angular/material/tabs';
import { MatExpansionModule } from '@angular/material/expansion';
import { MatRadioModule } from '@angular/material/radio';
import { MatDividerModule } from '@angular/material/divider';

import { JournalRoutingModule } from './journal-routing.module';
import { JournalHomeComponent } from './journal-home/journal-home.component';
import { JournalStatsComponent } from './journal-stats/journal-stats.component';
import { JournalInventoryComponent } from './journal-inventory/journal-inventory.component';
import { JournalSpellbookComponent } from './journal-spellbook/journal-spellbook.component';
import { JournalSpellcardsComponent } from './journal-spellcards/journal-spellcards.component';
import { JournalCharacterComponent } from './journal-character/journal-character.component';
import { AttributeFieldComponent } from './journal-stats/attribute-panel/attribute-field/attribute-field.component';
import { SkillFieldComponent } from './journal-stats/skill-panel/skill-field/skill-field.component';
import { WeaponsContainerComponent } from './journal-stats/weapons-container/weapons-container.component';
import { ArmorClassComponent } from './journal-stats/info-row/armor-class/armor-class.component';
import { MovementComponent } from './journal-stats/info-row/movement/movement.component';
import { HitDiceComponent } from './journal-stats/life/hit-dice/hit-dice.component';
import { InitiativeComponent } from './journal-stats/info-row/initiative/initiative.component';
import { ConditionsDetailsComponent } from './journal-stats/info-row/conditions/conditions-details/conditions-details.component';
import { DeathSaveComponent } from './journal-stats/life/death-save/death-save.component';
import { LifeComponent } from './journal-stats/life/life.component';
import { WeaponTableComponent } from './journal-stats/weapons-container/weapon-table/weapon-table.component';
import { WeaponModalComponent } from './journal-stats/weapons-container/weapon-table/weapon-modal/weapon-modal.component';
import { SpellTableComponent } from './journal-stats/weapons-container/spell-table/spell-table.component';
import { SpellModalComponent } from './spell-modal/spell-modal.component';
import { AbilityPanelComponent } from './journal-stats/ability-panel/ability-panel.component';
import { AbilityTableComponent } from './journal-stats/ability-panel/ability-table/ability-table.component';
import { AbilityModalComponent } from './journal-stats/ability-panel/ability-table/ability-modal/ability-modal.component';
import { TraitTableComponent } from './journal-stats/ability-panel/trait-table/trait-table.component';
import { TraitModalComponent } from './journal-stats/ability-panel/trait-table/trait-modal/trait-modal.component';
import { SpellslotsComponent } from './journal-stats/ability-panel/spellslots/spellslots.component';
import { SpellslotsModalComponent } from './journal-stats/ability-panel/spellslots/spellslots-modal/spellslots-modal.component';
import { InfoRowComponent } from './journal-stats/info-row/info-row.component';
import { ConditionsComponent } from './journal-stats/info-row/conditions/conditions.component';
import { AttributeDetailsComponent } from './journal-stats/attribute-panel/attribute-field/attribute-details/attribute-details.component';
import { SimpleItemDetailsComponent } from './journal-inventory/simple-item-details/simple-item-details.component';
import { ModalComponent } from './journal-home/modal/modal.component';
import { SharedComponentsModule } from '../shared-components/shared-components.module';
import { ProficienciesTableComponent } from './journal-stats/ability-panel/proficiencies-table/proficiencies-table.component';
import { ToolsModalComponent } from './journal-stats/ability-panel/proficiencies-table/tools-modal/tools-modal.component';
import { TraitDetailsComponent } from './journal-stats/ability-panel/trait-table/trait-details/trait-details.component';
import { DetailsPanelComponent } from './journal-home/details-panel/details-panel.component';
import { AbilityDetailsComponent } from './journal-stats/ability-panel/ability-table/ability-details/ability-details.component';
import { LifeDetailsComponent } from './journal-stats/life/life-details/life-details.component';
import { WeaponDetailsComponent } from './journal-stats/weapons-container/weapon-table/weapon-details/weapon-details.component';
import { AttributePanelComponent } from './journal-stats/attribute-panel/attribute-panel.component';
import { SkillPanelComponent } from './journal-stats/skill-panel/skill-panel.component';
import { SaveThrowPanelComponent } from './journal-stats/save-throw-panel/save-throw-panel.component';
import { SaveThrowFieldComponent } from './journal-stats/save-throw-panel/save-throw-field/save-throw-field.component';
import { ProficiencyFieldComponent } from './journal-stats/info-row/proficiency/proficiency-field.component';
import { SaveThrowDetailsComponent } from './journal-stats/save-throw-panel/save-throw-details/save-throw-details.component';
import { SkillDetailsComponent } from './journal-stats/skill-panel/skill-details/skill-details.component';
import { ArmorClassDetailsComponent } from './journal-stats/info-row/armor-class/armor-class-details/armor-class-details.component';
import { InitiativeDetailsComponent } from './journal-stats/info-row/initiative/initiative-details/initiative-details.component';
import { MovementDetailsComponent } from './journal-stats/info-row/movement/movement-details/movement-details.component';
import { ProficiencyDetailsComponent } from './journal-stats/info-row/proficiency/proficiency-details/proficiency-details.component';
import { ExhaustionDetailsComponent } from './journal-stats/info-row/conditions/exhaustion-details/exhaustion-details.component';
import { NavigationPanelComponent } from './journal-home/navigation-panel/navigation-panel.component';
import { JournalNotesComponent } from './journal-notes/journal-notes.component';
import { JournalQuestsComponent } from './journal-quests/journal-quests.component';
import { JournalNpcsComponent } from './journal-npcs/journal-npcs.component';
import { JournalPlacesComponent } from './journal-places/journal-places.component';
import { JournalMapsComponent } from './journal-maps/journal-maps.component';
import { JournalRulesetComponent } from './journal-ruleset/journal-ruleset.component';
import { JournalSettingsComponent } from './journal-settings/journal-settings.component';
import { SimpleItemModalComponent } from './journal-inventory/simple-item-modal/simple-item-modal.component';
import { SpellcardComponent } from './journal-spellcards/spellcard/spellcard.component';
import { AddCardComponent } from './journal-spellcards/add-card/add-card.component';
import { GeneralComponent } from './journal-character/general/general.component';
import { ClassComponent } from './journal-character/class/class.component';
import { SubclassComponent } from './journal-character/subclass/subclass.component';
import { SpeciesComponent } from './journal-character/species/species.component';
import { BackgroundComponent } from './journal-character/background/background.component';
import { StoryComponent } from './journal-character/story/story.component';
import { FavoriteSpellsModalComponent } from './journal-stats/weapons-container/spell-table/favorite-spells-modal/favorite-spells-modal.component';
import { MatRippleModule } from '@angular/material/core';
import { CustomSpellsModalComponent } from './journal-spellbook/custom-spells-modal/custom-spells-modal.component';
import { DurationPipe } from '../../pipes/duration/duration.pipe';
import { CombinedComponent } from './journal-character/combined/combined.component';
import { DividerComponent } from '../shared-components/divider/divider.component';

@NgModule({
  declarations: [
    JournalHomeComponent,
    JournalStatsComponent,
    JournalInventoryComponent,
    JournalSpellbookComponent,
    JournalSpellcardsComponent,
    JournalCharacterComponent,
    AttributeFieldComponent,
    SkillFieldComponent,
    WeaponsContainerComponent,
    ArmorClassComponent,
    MovementComponent,
    HitDiceComponent,
    InitiativeComponent,
    DeathSaveComponent,
    LifeComponent,
    WeaponTableComponent,
    SpellTableComponent,
    SpellModalComponent,
    AbilityPanelComponent,
    AbilityTableComponent,
    AbilityModalComponent,
    TraitTableComponent,
    TraitModalComponent,
    SpellslotsComponent,
    SpellslotsModalComponent,
    ProficienciesTableComponent,
    ToolsModalComponent,
    TraitDetailsComponent,
    DetailsPanelComponent,
    AbilityDetailsComponent,
    LifeDetailsComponent,
    WeaponDetailsComponent,
    AttributePanelComponent,
    SkillPanelComponent,
    SaveThrowPanelComponent,
    SaveThrowFieldComponent,
    ProficiencyFieldComponent,
    ConditionsDetailsComponent,
    InfoRowComponent,
    ConditionsComponent,
    AttributeDetailsComponent,
    SaveThrowDetailsComponent,
    SkillDetailsComponent,
    ArmorClassDetailsComponent,
    InitiativeDetailsComponent,
    MovementDetailsComponent,
    ProficiencyDetailsComponent,
    ExhaustionDetailsComponent,
    NavigationPanelComponent,
    JournalNotesComponent,
    JournalQuestsComponent,
    JournalNpcsComponent,
    JournalPlacesComponent,
    JournalMapsComponent,
    JournalRulesetComponent,
    JournalSettingsComponent,
    SimpleItemDetailsComponent,
    ModalComponent,
    SimpleItemModalComponent,
    WeaponModalComponent,
    SpellcardComponent,
    AddCardComponent,
    GeneralComponent,
    ClassComponent,
    SubclassComponent,
    SpeciesComponent,
    BackgroundComponent,
    StoryComponent,
    FavoriteSpellsModalComponent,
    CustomSpellsModalComponent,
    CombinedComponent,
  ],
  providers: [TranslatePipe, DurationPipe],
  imports: [
    CommonModule,
    JournalRoutingModule,
    NgbModule,
    NgbDropdownModule,
    FormsModule,
    CdkTableModule,
    DragDropModule,
    SharedComponentsModule,
    ReactiveFormsModule,
    MatSlideToggleModule,
    MatSelectModule,
    MatInputModule,
    MatFormFieldModule,
    MatTabsModule,
    MatExpansionModule,
    MarkdownModule.forRoot(),
    NgxEditorModule,
    MatRippleModule,
    TranslateModule,
    MatRadioModule,
    MatDividerModule,
    DurationPipe,
    DividerComponent,
  ],
})
export class JournalModule {}
