import { Component, OnInit } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { BaseService } from 'src/app/shared/service/base.service';

@Component({
    selector: 'app-student-management',
    templateUrl: './student-management.component.html',
    styleUrls: ['./student-management.component.scss']
})
export class StudentManagementComponent implements OnInit {

    viewMode = 'list'

    students: any[] = []
    filteredStudents: any[] = []

    years: number[] = []
    selectedYear = new Date().getFullYear()

    search = {
        admissionNumber: '',
        name: '',
        course: '',
        department: ''
    }

    studentForm!: FormGroup

    constructor(
        private fb: FormBuilder,
        private baseService: BaseService
    ) { }

    ngOnInit() {

        this.generateYears()

        this.initForm()

        this.loadStudents()

    }

    initForm() {

        this.studentForm = this.fb.group({

            admissionNumber: [''],

            admissionYear: [new Date().getFullYear()],

            firstName: ['', Validators.required],
            middleName: [''],
            lastName: ['', Validators.required],

            dob: ['', Validators.required],

            phone: [''],
            email: [''],

            // course:[''],
            // department:[''],
            // semester:[''],
            section: [''],
            guardianName: [''],
            guardianPhone: ['']

        })

    }

    generateYears() {

        const current = new Date().getFullYear()

        for (let i = current; i >= current - 10; i--) {

            this.years.push(i)

        }

    }

    loadStudents() {

        this.baseService.getData(
            `students/${this.selectedYear}`
        )
            .subscribe((res: any) => {

                this.students = res.data || []

                this.filteredStudents = [...this.students]

            })

    }

    applyFilters() {

        this.filteredStudents = this.students.filter(s => {

            return (!this.search.admissionNumber ||
                s.admissionNumber?.toLowerCase()
                    .includes(this.search.admissionNumber.toLowerCase()))

                && (!this.search.name ||
                    (s.firstName + ' ' + s.lastName)
                        .toLowerCase()
                        .includes(this.search.name.toLowerCase()))

                && (!this.search.course ||
                    s.course?.toLowerCase()
                        .includes(this.search.course.toLowerCase()))

                && (!this.search.department ||
                    s.department?.toLowerCase()
                        .includes(this.search.department.toLowerCase()))

        })

    }

    openAddStudent() {

        this.viewMode = 'add'

        this.loadNextAdmissionNumber()

    }

    loadNextAdmissionNumber() {

        this.baseService
            .getData('students/next-admission-number')
            .subscribe((res: any) => {

                this.studentForm.patchValue({
                    admissionNumber: res.data
                })

            })

    }

    goBack() {

        this.viewMode = 'list'

        this.studentForm.reset({
            admissionYear: new Date().getFullYear()
        })

    }

    saveStudent() {

        if (this.studentForm.invalid) {
            this.studentForm.markAllAsTouched()
            return
        }

        this.baseService.postData(
            'students',
            new URLSearchParams( this.studentForm.value)
           
        )
            .subscribe(res => {

                this.goBack()

                this.loadStudents()

            })

    }

}