import {X} from '@angular/cdk/keycodes';
import {Injectable} from '@angular/core';
import {from, Observable, of} from 'rxjs';
import {map} from 'rxjs/operators';
import Swal, {SweetAlertResult} from 'sweetalert2';

@Injectable({
    providedIn: 'root'
})
export class SweetalertService {

    constructor() {
    }

    saveSuccess(msg: string = 'บันทึกสำเร็จแล้ว') {
        Swal.fire({
            icon: 'success',
            text: msg,
            heightAuto: false
        })
    }

    saveSuccessCustom(title: string = 'บันทึกสำเร็จแล้ว', text) {
        console.log(text)
        Swal.fire({
            icon: 'success',
            title: title,
            html: `<span>pass: ${text.pass} &nbsp;</span>` + `<span>fail: ${text.fail}</span>`,
            text: text.toString(),
            heightAuto: false
        })
    }


    save(msg: string = 'บันทึกสำเร็จแล้ว', confirmButtonText: string = 'ตกลง'): Observable<SweetAlertResult<boolean>> {
        let dialog = Swal.fire({
            icon: 'success',
            title: `${msg}`,
            heightAuto: false,
            showCancelButton: false,
            confirmButtonText: `${confirmButtonText}`,
        })
        return from(dialog)
    }

    updateSuccess(msg: string = 'อัพเดตสำเร็จแล้ว') {
        Swal.fire({
            icon: 'success',
            text: msg,
            heightAuto: false
        })
    }

    removeSuccess(msg: string = 'ลบรายการสำเร็จแล้ว') {
        Swal.fire({
            icon: 'success',
            text: msg,
            heightAuto: false
        })
    }

    error(msg: string = 'ผิดพลาด') {
        Swal.fire({
            icon: 'error',
            text: msg,
            heightAuto: false
        })
    }

    errorBig(msg: string = 'ผิดพลาด') {
        Swal.fire({
            icon: 'error',
            title: msg,
            heightAuto: false
        })
    }

    confirmOpenExam(msg: string = 'ต้องการเปิดรอบสอบนี้ไหม?', confirmButtonText: string = 'ตกลง', cancelButtonText: string = 'ยกเลิก'): Observable<SweetAlertResult<boolean>> {
        let dialog = Swal.fire({
            icon: 'warning',
            title: `${msg}`,
            heightAuto: false,
            showCancelButton: true,
            confirmButtonText: `${confirmButtonText}`,
            cancelButtonText: `${cancelButtonText}`,
        })
        return from(dialog)
    }

    confirm(msg: string = 'ต้องการจะลบข้อมูลนี้ไหม?', confirmButtonText: string = 'ตกลง', cancelButtonText: string = 'ยกเลิก'): Observable<SweetAlertResult<boolean>> {
        let dialog = Swal.fire({
            icon: 'warning',
            title: `${msg}`,
            heightAuto: false,
            showCancelButton: true,
            confirmButtonText: `${confirmButtonText}`,
            cancelButtonText: `${cancelButtonText}`,
        })
        return from(dialog)
    }

    confirmWithSubtext(msg: string = 'ต้องการจะลบข้อมูลนี้ไหม?', text: string = '', confirmButtonText: string = 'ตกลง', cancelButtonText: string = 'ยกเลิก'): Observable<SweetAlertResult<boolean>> {
        let dialog = Swal.fire({
            icon: 'warning',
            title: `${msg}`,
            html: `<span class="text-red-500">${text}</span>`,
            heightAuto: false,
            showCancelButton: true,
            confirmButtonText: `${confirmButtonText}`,
            cancelButtonText: `${cancelButtonText}`,
        })
        return from(dialog)
    }

    confirmText(text: string, confirmButtonText: string = 'ตกลง', cancelButtonText: string = 'ยกเลิก'): Observable<SweetAlertResult<boolean>> {
        let dialog = Swal.fire({
            icon: 'warning',
            title: `${text}`,
            heightAuto: false,
            showCancelButton: true,
            confirmButtonText: `${confirmButtonText}`,
            cancelButtonText: `${cancelButtonText}`,
        })
        return from(dialog)
    }

    confirmSubject(msg: string = 'ต้องการเปลี่ยนแปลงวิชาหรือไม่?', confirmButtonText: string = 'ตกลง', cancelButtonText: string = 'ยกเลิก'): Observable<SweetAlertResult<boolean>> {
        let dialog = Swal.fire({
            icon: 'warning',
            title: `${msg}`,
            text: 'ทุกครั้งที่มีการเปลี่ยนแปลงวิชากรุณาตรวจสอบ ห้องสอบ อีกครั้ง',
            heightAuto: false,
            showCancelButton: true,
            confirmButtonText: `${confirmButtonText}`,
            cancelButtonText: `${cancelButtonText}`,
        })
        return from(dialog)
    }

    recieve(msg: string = 'ต้องการเปลี่ยนสถานะข้อมูลนี้ไหม?', confirmButtonText: string = 'ตกลง', cancelButtonText: string = 'ยกเลิก'): Observable<SweetAlertResult<boolean>> {
        let dialog = Swal.fire({
            icon: 'warning',
            title: `${msg}`,
            heightAuto: false,
            showCancelButton: true,
            confirmButtonText: `${confirmButtonText}`,
            cancelButtonText: `${cancelButtonText}`,
        })
        return from(dialog)
    }

    recieveMoney(msg: string = 'ยืนยันการรับเงินนี้ไหม?', confirmButtonText: string = 'ตกลง', cancelButtonText: string = 'ยกเลิก'): Observable<SweetAlertResult<boolean>> {
        let dialog = Swal.fire({
            icon: 'warning',
            title: `${msg}`,
            heightAuto: false,
            showCancelButton: true,
            confirmButtonText: `${confirmButtonText}`,
            cancelButtonText: `${cancelButtonText}`,
        })
        return from(dialog)
    }

    success(text: string) {
        Swal.fire({
            title: text,
            icon: 'success',
            confirmButtonText: 'ตกลง',
            heightAuto: false
        })
    }

    recieve2(msg: string = 'ต้องการเปลี่ยนสถานะข้อมูลนี้ไหม?', confirmButtonText: string = 'ตกลง', cancelButtonText: string = 'ยกเลิก'): Observable<SweetAlertResult<boolean>> {
        let dialog = Swal.fire({
            icon: 'warning',
            title: `${msg}`,
            heightAuto: false,
            showCancelButton: true,
            confirmButtonText: `${confirmButtonText}`,
            cancelButtonText: `${cancelButtonText}`,
        })
        return from(dialog)
    }

    successThen(text: string): Observable<SweetAlertResult<boolean>> {
        const dialog = Swal.fire({
            title: text,
            icon: 'success',
            confirmButtonText: 'ตกลง',
            heightAuto: false
        })
        return from(dialog)
    }


    err() {
        Swal.fire({
            title: 'เกิดข้อผิดพลาด',
            icon: 'error',
            confirmButtonText: 'ตกลง',
        })
    }

    errText(text: string) {
        Swal.fire({
            title: text,
            icon: 'error',
            confirmButtonText: 'ตกลง',
            heightAuto: false
        })
    }


    errTextAndDetail(title: string, textsub: string) {
        Swal.fire({
            title: title,
            text: `สาเหตุ : ${textsub}`,
            icon: 'error',
            confirmButtonText: 'รับทราบ',
            heightAuto: false
        })
    }

    errTextandSub(text: string, subText: string) {
        Swal.fire({
            title: text,
            text: subText,
            icon: 'error',
            confirmButtonText: 'ตกลง',
            heightAuto: false
        })
    }


    errOpenExamDetailText(text: string) {
        Swal.fire({
            title: 'เปิดการสอบไม่ได้',
            text: `สาเหตุ : ${text}`,
            icon: 'info',
            confirmButtonText: 'ตกลง',
            heightAuto: false
        })
    }

    errCloseExamDetailText(text: string) {
        Swal.fire({
            title: 'ปิดการสอบไม่ได้',
            text: `สาเหตุ : ${text}`,
            icon: 'info',
            confirmButtonText: 'ตกลง',
            heightAuto: false
        })
    }

    loadingStart(text: string = 'กำลังโหลดข้อมูล ...') {
        Swal.fire({
            title: `${text}`,
            didOpen() {
                Swal.showLoading()
            },
            onAfterClose() {
                Swal.hideLoading()
            },
            allowOutsideClick: false,
            allowEscapeKey: false,
        })
    }

    close() {
        Swal.close()
    }


}
