import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';

import { DashboardRoutingModule } from './dashboard-routing.module';
import { SalesComponent } from './sales/sales.component';
import { EcommerceComponent } from './ecommerce/ecommerce.component';
import { CryptoComponent } from './crypto/crypto.component';
import { JobsComponent } from './jobs/jobs.component';
import { NftComponent } from './nft/nft.component';
import { AnalyticsComponent } from './analytics/analytics.component';
import { ProjectsComponent } from './projects/projects.component';
import { HrmComponent } from './hrm/hrm.component';
import { CrmComponent } from './crm/crm.component';
import { PersonalComponent } from './personal/personal.component';
import { StocksComponent } from './stocks/stocks.component';
import { CourseComponent } from './course/course.component';
import { NgApexchartsModule } from 'ng-apexcharts';
import { NgChartsModule } from 'ng2-charts';
import { CarouselModule } from 'ngx-owl-carousel-o';
import { SharedModule } from 'src/app/shared/sharedmodule';
import { NgxChartsModule } from '@swimlane/ngx-charts';
import { NgSelectModule } from '@ng-select/ng-select';
import { CompanyRegistrationComponent } from '../company-components/company-registration/company-registration.component';
import { DepartmentRegisterComponent } from '../company-components/company-registration/branch-business-unit/department-register/department-register.component';
import { BranchBusinessUnitComponent } from '../company-components/company-registration/branch-business-unit/branch-business-unit.component';
import { DepartmentListComponent } from '../company-components/company-registration/branch-business-unit/department-list/department-list.component';
import { SubDepartmentOneComponent } from '../company-components/company-registration/branch-business-unit/sub-department-one/sub-department-one.component';
import { SubDepartmentThreeComponent } from '../company-components/company-registration/branch-business-unit/sub-department-three/sub-department-three.component';
import { SubDepartmentTwoComponent } from '../company-components/company-registration/branch-business-unit/sub-department-two/sub-department-two.component';
import { SubDepartmentFourComponent } from '../company-components/company-registration/branch-business-unit/sub-department-four/sub-department-four.component';
import { SectionRegistrationComponent } from '../company-components/company-registration/branch-business-unit/section-registration/section-registration.component';
import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';
import { Bu1Service } from 'src/app/shared/services/bu1.service';
import { HttpRequestInterceptor } from 'src/app/shared/services/http-request.interceptor';
import { FormsModule } from '@angular/forms';
import { Bu2Service } from 'src/app/shared/services/bu2.service';
import { Bu3Service } from 'src/app/shared/services/bu3.service';
import { Bu4Service } from 'src/app/shared/services/bu4.service';
import { Bu5Service } from 'src/app/shared/services/bu5.service';
import { Bu6Service } from 'src/app/shared/services/bu6.service';
import { Bu7Service } from 'src/app/shared/services/bu7.service';
import { PositionService } from 'src/app/shared/services/position.service';
import { PLService } from 'src/app/shared/services/pl.service';
import { EmpGroupService } from 'src/app/shared/services/emp-group.service';
import { EmpTypeService } from 'src/app/shared/services/employee-type.service';
import { JobDetailManagementComponent } from '../job-detail-components/job-detail-management/job-detail-management.component';
import { ImportDataComponent } from '../job-detail-components/job-detail-management/import-data/import-data.component';
import { JobDescriptionComponent } from '../company-components/job-description/job-description.component';
import { PositionUnitComponent } from '../company-components/job-description/position/position-unit.component';
import { EmployeeGroupUnit } from '../company-components/job-description/employee-group-unit/employee-group-unit.component';
import { EmployeeCategories } from '../company-components/job-description/employee-categories/employee-categories.component';
import { EmployeeLevel } from '../company-components/job-description/employee-level/employee-level.component';
import { AccountSettingsComponent } from '../company-components/account-settings/account-settings.component';
import { UserSettingsComponent } from '../company-components/account-settings/user-settings/user-settings.component';
import { SetAPasswordComponent } from '../company-components/account-settings/set-a-password/set-a-password.component';
import { NameRegistrationComponent } from '../competency-assessment/name-registration/name-registration.component';
import { TypeRegistration } from '../competency-assessment/name-registration/type-registration/type-registration.component';
import { CompetencyTopic } from '../competency-assessment/name-registration/competency-topic/competency-topic.component';
import { ToolRegisterComponent } from '../competency-assessment/tool-register/tool-register.component';
import { AssessmentToolComponent } from '../competency-assessment/tool-register/assessment-tool/assessment-tool.component';
import { CourseRegistrationComponent } from '../competency-assessment/course-registration/course-registration.component';
import { DevelopmentCourseComponent } from '../competency-assessment/course-registration/development-course/development-course.component';
import { CompetencyManagementComponent } from '../competency-assessment/competency-management/competency-management.component';
import { IndicatorsAndCurriculumComponent } from '../competency-assessment/competency-management/indicators-and-curriculum/indicators-and-curriculum.component';
import { EditGroupIndicators } from '../competency-assessment/competency-management/indicators-and-curriculum/edit-group-indicators/edit-group-indicators.component';
import { GroupCompetenciesComponent } from '../competency-assessment/competency-management/group-competencies/group-competencies.component';
import { EditGroupCompetenciesComponent } from '../competency-assessment/competency-management/group-competencies/edit-group-competencies/edit-group-competencies.component';
import { EvaluationCycleManagerComponent } from '../competency-assessment/evaluation-cycle-manager/evaluation-cycle-manager.component';
import { EvaluationCycleComponent } from '../competency-assessment/evaluation-cycle-manager/evaluation-cycle/evaluation-cycle.component';
import { SettingCompetencyComponent } from '../competency-assessment/setting-competency/setting-competency.component';
import { CompetencyConfigurationComponent } from '../competency-assessment/setting-competency/competency-configuration/competency-configuration.component';
import { IdpDevelopmentPlanComponent } from '../competency-assessment/idp-development-plan/idp-development-plan.component';
import { SetIdpDevelopmentPlanComponent } from '../competency-assessment/idp-development-plan/set-idp-development-plan/set-idp-development-plan.component';
import { NgxDaterangepickerMd } from 'ngx-daterangepicker-material';
import { JobCompetencyComponent } from '../job-detail-components/job-competency/job-competency.component';
import { SubJobCompetencyComponent } from '../job-detail-components/job-competency/sub-job-competency/sub-job-competency.component';
import { JobQualificationsComponent } from '../job-detail-components/job-qualifications/job-qualifications.component';
import { SubJobQualificationsComponent } from '../job-detail-components/job-qualifications/sub-job-qualifications/sub-job-qualifications.component';
import { JobDetailComponent } from '../job-detail-components/job-detail/job-detail.component';
import { WorkDetailComponent } from '../job-detail-components/job-detail/work-detail/work-detail.component';
import { SubCommandStructureComponent } from '../job-detail-components/command-structure/sub-command-structure/sub-command-structure.component';
import { CommandStructureComponent } from '../job-detail-components/command-structure/command-structure.component';
import { AssessmentManagementComponent } from '../performance-management-evaluation/assessment-management/assessment-management.component';
import { AssigningApproversComponent } from '../performance-management-evaluation/assessment-management/assigning-approvers/assigning-approvers.component';
import { SubJobPositionIndicatorsComponent } from '../job-detail-components/job-position-indicators/sub-job-position-indicators/sub-job-position-indicators.component';
import { DefineDocumentFormComponent } from '../competency-assessment/evaluation-cycle-manager/define-document-form/define-document-form.component';
import { EditDefineDocumentFormComponent } from '../competency-assessment/evaluation-cycle-manager/define-document-form/edit-define-document-form/edit-define-document-form.component';
import { EvaluationCyclePerformanceComponent } from '../performance-management-evaluation/evaluation-cycle-performance/evaluation-cycle-performance.component';
import { DocumentFormComponent } from '../performance-management-evaluation/evaluation-cycle-performance/document-form/document-form.component';
import { EditEvaluationFormComponent } from '../performance-management-evaluation/evaluation-cycle-performance/document-form/edit-evaluation-form/edit-evaluation-form.component';
import { RoundOneComponent } from '../performance-evaluation/supervisor-evaluation/round-one/round-one.component';
import { SupervisorEvaluationComponent } from '../performance-evaluation/supervisor-evaluation/supervisor-evaluation.component';
import { EmployeeRegistrationComponent } from '../company-components/employee-registration/employee-registration.component';
import { SubEmployeeRegistrationComponent } from '../company-components/employee-registration/sub-employee-registration/sub-employee-registration.component';
import { SetApproversComponent } from '../competency-assessment/competency-management/set-approvers/set-approvers.component';
import { NameRegistrationPerfomanceComponent } from '../performance-management-evaluation/name-registration-perfomance/name-registration-perfomance.component';
import { AssessmentTypesComponent } from '../performance-management-evaluation/name-registration-perfomance/assessment-types/assessment-types.component';
import { EvaluationGroupingComponent } from '../performance-management-evaluation/assessment-management/evaluation-grouping/evaluation-grouping.component';
import { EditEvaluationGroupingComponent } from '../performance-management-evaluation/assessment-management/evaluation-grouping/edit-evaluation-grouping/edit-evaluation-grouping.component';
import { JobPositionIndicatorsComponent } from '../job-detail-components/job-position-indicators/job-position-indicators.component';
import { AssessmentTopicsComponent } from '../performance-management-evaluation/name-registration-perfomance/assessment-topics/assessment-topics.component';
import { ManagementCycleComponent } from '../performance-management-evaluation/evaluation-cycle-performance/management-evaluation-cycle/management-evaluation-cycle.component';
import { EvaluationFactorsComponent } from '../performance-management-evaluation/evaluation-factors/evaluation-factors.component';
import { DefineEvaluationFactorsComponent } from '../performance-management-evaluation/evaluation-factors/define-evaluation-factors/define-evaluation-factors.component';
import { GradeRegistrationComponent } from '../competency-assessment/grade-registration/grade-registration.component';
import { GradeManagementComponent } from '../competency-assessment/grade-registration/grade-management/grade-management.component';
import { GroupGradeComponent } from '../competency-assessment/grade-registration/grade-management/group-grade/group-grade.component';
import { SubGradeRegistrationComponent } from '../competency-assessment/grade-registration/grade-management/sub-grade-registration/sub-grade-registration.component';
import { SettingPerformanceEvalutionComponent } from '../performance-management-evaluation/setting-performance-evalution/setting-performance-evalution.component';
import { AssessmentSystemConfigurationComponent } from '../performance-management-evaluation/setting-performance-evalution/assessment-system-configuration/assessment-system-configuration.component';
import { SelfEvaluationComponent } from '../performance-evaluation/self-evaluation/self-evaluation.component';
import { CompanyRegistrationPageComponent } from '../company-components/company-registration/company-registration-page/company-registration-page.component';
import { IdpEvalutionComponent } from '../performance-evaluation/idp-evaluation/idp-evalution.component';
import { PmsEvalutionComponent } from '../performance-evaluation/pms-evaluation/pms-evalution.component';
import { CEvaluationComponent } from '../performance-evaluation/c-evaluation/c-evaluation.component';
import { CompanyService } from 'src/app/shared/services/company.service';
import { CompetencytypeService } from 'src/app/shared/services/competencytype.service';
import { CompetencytopicService } from 'src/app/shared/services/competencytopic.service';
import { AssessmentService } from 'src/app/shared/services/assessment.service';
import { CompetencycourseService } from 'src/app/shared/services/competencycourse.service';
import { EmployeeService } from 'src/app/shared/services/employee.service';
import { EvaluationCycleService } from 'src/app/shared/services/evaluation-cycle.service';
import { SettingAssessmentService } from 'src/app/shared/services/setting-assessment.service';
import { MatDatepickerModule } from '@angular/material/datepicker';
import { MatNativeDateModule } from '@angular/material/core';
import { MatFormFieldModule } from '@angular/material/form-field';
import { MatIconModule } from '@angular/material/icon';
import { MatInputModule } from '@angular/material/input';
import { DateAdapter, MAT_DATE_FORMATS } from '@angular/material/core';
import { NativeDateAdapter } from '@angular/material/core';
import { BranchService } from 'src/app/shared/services/่branch.service';
import { JobCodeService } from 'src/app/shared/services/job-code.service';
import { FileService } from 'src/app/shared/services/file.service';
import { CompetencyGroupGradeService } from 'src/app/shared/services/competency-group-grade.service';
import { IndicatorsCoursesService } from 'src/app/shared/services/indicators-courses.service';
import { IdpDevelopmentService } from 'src/app/shared/services/idp-development.service';
import { GroupAssessmentService } from 'src/app/shared/services/group-assessment.service';
import { GroupApproveService } from 'src/app/shared/services/group-approve.service';
import { UserService } from 'src/app/shared/services/user.service';
import { ManageUserComponent } from '../company-components/account-settings/manage-user/manage-user.component';
import { PmstypeService } from 'src/app/shared/services/pmstype.service';
import { PmstopicService } from 'src/app/shared/services/pmstopic.service';
import { PmsGroupAssessmentService } from 'src/app/shared/services/pms-group-assessment.service';
import { PmsGroupApproveService } from 'src/app/shared/services/pms-group-approve.service';
import { PmsEaluationFactorsService } from 'src/app/shared/services/pms-ealuation-factors.service';
import { PmsMasfromEvaluationCycleService } from 'src/app/shared/services/pms-masfrom-evaluation.service';
import { PmsGroupGradeService } from 'src/app/shared/services/pms-group-grade.service';
import { PmsSettingAssessmentService } from 'src/app/shared/services/pms-setting-assessment.service';
import { PmsGradeRegistrationComponent } from '../performance-management-evaluation/pms-grade-registration/pms-pms-grade-registration.component';
import { PmsGradeManagementComponent } from '../performance-management-evaluation/pms-grade-registration/pms-grade-management/pms-grade-management.component';
import { PmsSubGradeRegistrationComponent } from '../performance-management-evaluation/pms-grade-registration/pms-grade-management/pms-sub-grade-registration/pms-sub-grade-registration.component';
import { PmsGroupGradeComponent } from '../performance-management-evaluation/pms-grade-registration/pms-grade-management/pms-group-grade/pms-group-grade.component';
import { EvaluationAssessmentService } from 'src/app/shared/services/evaluation-assessment.service';
import { AppraisalService } from 'src/app/shared/services/appraisal.service';

export const MY_DATE_FORMATS = {
  parse: {
    dateInput: 'DD-MM-YYYY',  // รูปแบบที่ใช้สำหรับการแปลงวันที่จาก input
  },
  display: {
    dateInput: 'DD-MM-YYYY',  // รูปแบบที่ใช้ในการแสดงวันที่
    monthYearLabel: 'MMM YYYY',
    dateA11yLabel: 'DD-MM-YYYY',
    monthYearA11yLabel: 'MMMM YYYY',
  },
};

export class CustomDateAdapter extends NativeDateAdapter {
  override format(date: Date, displayFormat: object): string {
    if (typeof displayFormat === 'string' && displayFormat === 'DD-MM-YYYY') {
      return `${date.getDate().toString().padStart(2, '0')}/${(date.getMonth() + 1)
        .toString()
        .padStart(2, '0')}/${date.getFullYear()}`;
    } else {
      return super.format(date, displayFormat);
    }
  }
}

@NgModule({
  declarations: [
    SalesComponent,
    EcommerceComponent,
    CryptoComponent,
    JobsComponent,
    NftComponent,
    AnalyticsComponent,
    ProjectsComponent,
    HrmComponent,
    CrmComponent,
    PersonalComponent,
    StocksComponent,
    CourseComponent,

    // my Component
    CompanyRegistrationComponent,
    BranchBusinessUnitComponent,
    DepartmentRegisterComponent,
    DepartmentListComponent,
    SectionRegistrationComponent,
    SubDepartmentOneComponent,
    SubDepartmentTwoComponent,
    SubDepartmentThreeComponent,
    SubDepartmentFourComponent,
    JobDescriptionComponent,
    PositionUnitComponent,
    EmployeeGroupUnit,
    EmployeeCategories,
    AccountSettingsComponent,
    UserSettingsComponent,
    EmployeeLevel,
    SetAPasswordComponent,
    NameRegistrationComponent,
    TypeRegistration,
    CompetencyTopic,
    ToolRegisterComponent,
    AssessmentToolComponent,
    CompetencyManagementComponent,
    JobDetailManagementComponent,
    CourseRegistrationComponent,
    DevelopmentCourseComponent,
    IndicatorsAndCurriculumComponent,
    ImportDataComponent,
    EditGroupIndicators,
    GroupCompetenciesComponent,
    EditGroupCompetenciesComponent,
    EvaluationCycleManagerComponent,
    EvaluationCycleComponent,
    SettingCompetencyComponent,
    CompetencyConfigurationComponent,
    IdpDevelopmentPlanComponent,
    SetIdpDevelopmentPlanComponent,
    JobCompetencyComponent,
    SubJobCompetencyComponent,
    JobQualificationsComponent,
    SubJobQualificationsComponent,
    JobDetailComponent,
    WorkDetailComponent,
    CommandStructureComponent,
    SubCommandStructureComponent,
    AssessmentManagementComponent,
    AssigningApproversComponent,
    JobPositionIndicatorsComponent,
    SubJobPositionIndicatorsComponent,
    DefineDocumentFormComponent,
    EditDefineDocumentFormComponent,
    EvaluationCyclePerformanceComponent,
    DocumentFormComponent,
    EditEvaluationFormComponent,
    RoundOneComponent,
    SupervisorEvaluationComponent,
    EmployeeRegistrationComponent,
    SubEmployeeRegistrationComponent,
    AssessmentTopicsComponent,
    SetApproversComponent,
    NameRegistrationPerfomanceComponent,
    AssessmentTypesComponent,
    EvaluationGroupingComponent,
    EditEvaluationGroupingComponent,
    ManagementCycleComponent,
    EvaluationFactorsComponent,
    DefineEvaluationFactorsComponent,
    GradeRegistrationComponent,
    GradeManagementComponent,
    GroupGradeComponent,
    SubGradeRegistrationComponent,
    SettingPerformanceEvalutionComponent,
    AssessmentSystemConfigurationComponent,
    SelfEvaluationComponent,
    IdpEvalutionComponent,
    CompanyRegistrationPageComponent,
    PmsEvalutionComponent,
    CEvaluationComponent,
    ManageUserComponent,
    PmsGradeRegistrationComponent,
    PmsGradeManagementComponent,
    PmsGroupGradeComponent,
    PmsSubGradeRegistrationComponent
  ],
  imports: [
    CommonModule,
    DashboardRoutingModule,
    NgChartsModule,
    NgApexchartsModule,
    CarouselModule,
    SharedModule,
    NgxChartsModule,
    NgSelectModule,
    HttpClientModule,
    FormsModule,
    NgxDaterangepickerMd.forRoot(),
    MatDatepickerModule,
    MatNativeDateModule,
    MatInputModule,
    MatFormFieldModule,
    MatIconModule,
  ],
  providers: [
    Bu1Service,
    Bu2Service,
    Bu3Service,
    Bu4Service,
    Bu5Service,
    Bu6Service,
    Bu7Service,
    PositionService,
    PLService,
    EmpGroupService,
    EmpTypeService,
    CompanyService,
    CompetencytypeService,
    CompetencytopicService,
    AssessmentService,
    CompetencycourseService,
    EmployeeService,
    EvaluationCycleService,
    SettingAssessmentService,
    JobCodeService,
    BranchService,
    FileService,
    CompetencyGroupGradeService,
    IndicatorsCoursesService,
    IdpDevelopmentService,
    GroupAssessmentService,
    GroupApproveService,
    UserService,
    PmstypeService,
    PmstopicService,
    PmsGroupAssessmentService,
    PmsGroupApproveService,
    PmsEaluationFactorsService,
    PmsMasfromEvaluationCycleService,
    PmsGroupGradeService,
    PmsSettingAssessmentService,
    EvaluationAssessmentService,
    AppraisalService,
    {
      provide: HTTP_INTERCEPTORS,
      useClass: HttpRequestInterceptor,
      multi: true,
    },
    { provide: DateAdapter, useClass: CustomDateAdapter },
    { provide: MAT_DATE_FORMATS, useValue: MY_DATE_FORMATS }]
})
export class DashboardModule { }