| import React, { useEffect, useState, useCallback } from 'react'
import settings from '../../Helpers/Url';
import Pagination from 'react-js-pagination';
import "bootstrap/dist/css/bootstrap.min.css"
import axios from 'axios';
import Modal from 'react-modal';
import { css } from "@emotion/react";
import ClipLoader from "react-spinners/ClipLoader";
import './Admin.css'
import { Link } from 'react-router-dom';
export default function AdminPizzaTypes() {
  
    const [recordData, setMapData] = useState({});
    const [APIData, setAPIData] = useState([]);
    const [name, setName] = useState("");
    const [price, setPrice] = useState("");
    const [image, setImage] = useState("");
    const [description, setDescription] = useState("");
    const [Id, setId] = useState("");
    const [status, setStatus] = useState("");
    const [paginationItems, setPaginationItems] = useState({});
    const [responseMessage, setResponseMessage] = useState("");
    let [loading, setLoading] = useState(false);
    let [color, setColor] = useState("#ffffff");
    const [modalIsOpen, setIsOpen] = useState(false);
    Modal.setAppElement('#root');
    const override = css`
    display: block;
    margin: 0 auto;
    border-color: red;
  `;
  const customStyles = {
    content: {
      top: '50%',
      left: '50%',
      right: 'auto',
      bottom: 'auto',
      marginRight: '-50%',
      transform: 'translate(-50%, -50%)',
    },
    body:{
        width:"400"
    }
  };
    function openModal() {
        setIsOpen(true);
      }
    function closeModal() {
        setIsOpen(false);
    }
    function setRecordData(data){
        setResponseMessage("");
        setName(data.name ?? "");
        setPrice(data.price ?? "");
        setDescription(data.description ?? "");
        setStatus(data.status ?? "");
        setMapData(data);
    }
    const handlePageClick = (pageNumber) => {
        fetchPizzaTypes(pageNumber)
      };
    const fetchPizzaTypes = useCallback((pageNumber) => {
        setLoading(true);
        const baseurl = pageNumber ? `${settings.baseUrl}/pizza_type?page=${pageNumber}` : `${settings.baseUrl}/pizza_order`
         axios.get(baseurl, {headers:settings.headers})
        .then((response) => {
            setLoading(false);
            console.log(response.data.data);
            setAPIData(response.data.data.data);
            const paginationData = response.data.data.meta;
            setPaginationItems(paginationData);
            console.log(paginationItems)
        })      
      }, [paginationItems])
      function editPizzaType() {
        const formData = new FormData() 
        formData.append('image', image);
        sendPizzaImage(formData,"edit");
       
      }
      async function updatePizzaType(data, message){
        setLoading(true);
        const baseurl = `${settings.baseUrl}/pizza_type/${recordData.id}/update`
        await axios.put(baseurl, data, {headers:settings.headers})
       .then((response) => {
        setLoading(false);
        if(response.data.responseCode === '200'){
            setResponseMessage(message)
            fetchPizzaTypes(1)
            setTimeout(function() {
                closeModal();
            }, 2000);
          }else{
            setResponseMessage("Something Went Wrong")
          }
       }) 
      }
      function setModalFunctionType(type){
        if(type === "edit"){
            return  <button className="modal-fulfil-button" onClick={editPizzaType}>Edit</button>
        }else{
            return  <button className="modal-fulfil-button" onClick={addPizzaType}>Add</button>
        }
      }
      function addPizzaType(){
        const formData = new FormData() 
        formData.append('image', image);
        sendPizzaImage(formData, "add");
      }
      async function sendPizzaImage(formData, apiType){
        setLoading(true);
        const baseurl = `${settings.baseUrl}/pizza_type/image`
        await axios.post(baseurl, formData, {headers:settings.imageHeaders})
        .then((response) => {
            setLoading(false);
            if(response.data.responseCode === '200'){
                let imageName = response.data.data;
                let dataParams = jsonParams(imageName)
                console.log(dataParams)
                if(apiType==="edit"){
                    updatePizzaType(dataParams, "Pizza Type Updated Successfully")
                }else{
                    addPizzaTypeToDB(dataParams, "Pizza Type Added Successfully")
                }
              }else{
                return false;
              }
        }) 
      }
      function jsonParams(imageData){
        const data = {
            name: name,
            price: price,
            image: imageData,
            description: description,
            status: status
        }
        return data;
      }
      function addPizzaTypeToDB(data, message){
        setLoading(true);
        const baseurl = `${settings.baseUrl}/pizza_type/store`
        axios.post(baseurl, data, {headers:settings.headers})
       .then((response) => {
        setLoading(false);
        if(response.data.responseCode === '200'){
            setResponseMessage(message)
            fetchPizzaTypes(1)
            setTimeout(function() {
                closeModal();
            }, 2000);
          }else{
            setResponseMessage("Something Went Wrong")
          }
       }) 
      }
      function deletePizzaType() {
        const baseurl = `${settings.baseUrl}/pizza_type/${recordData.id}`
        deletePizza(baseurl, "Pizza type deleted")
      }
      function deletePizza(baseUrl, message) {
        setLoading(true);
        axios.delete(baseUrl, {headers:settings.headers})
        .then((response) => {
            setLoading(false);
            if(response.data.responseCode === '200'){
                setResponseMessage(message)
                fetchPizzaTypes(1)
                setTimeout(function() {
                   alert(message);
                }, 2000);
              }else{
                setResponseMessage("Something Went Wrong")
              }
        })
      }
      function setPizzaType(data){
       
        switch(data.status){
            case "1":
                return "Activated"
           default:
                return "Archived"
       
        }
    }
      useEffect(() => {
        fetchPizzaTypes(1)
    }, [])
  return (
    <div>
        <div className="container">
            <h2> Pizza Types</h2>
           
           
                <div className="row">
                
                <div className="sweet-loading">
                        <ClipLoader color={color} loading={loading} css={override} size={150} />
                </div>
                    <div className='col-md-12 table-responsive'>
                    <Link to={'/all/orders'}>
                        <button className="modal-fulfil-button" style={{float:"right", marginBottom:"10px"}}>Pizza Orders</button>
                    </Link>
            
                <button onClick={(event) => { openModal(); setRecordData("");}} className="modal-close-button" style={{float:"left",backgroundColor: "red"}}>Add</button>
                    <table className='table table-dark table-striped table-hover table-bordered'>
                   
                            <thead>
                                <tr>
                                    <th scope="col">Image</th>
                                    <th scope="col">Name</th>
                                    <th scope="col">Price</th>
                                    <th scope="col">Pizza Status</th>
                                    <th></th>
                                    <th></th>
                                </tr>
                            </thead>
                            <tbody>
                            {APIData.map((data, key) => {
                                    return (
                                        <tr key = {key}>
                                        <td><img src={data.image} alt=""
                                        /></td>
                                        <td>{data.name}</td>
                                        <td>{data.price}</td>
                                        <td>{setPizzaType(data)}</td>
                                        <td> <button className="fulfil-button" onClick={(event) => { openModal(); setRecordData(data);}} >Edit</button></td>
                                        <td> <button  className="decline-button" onClick={(event) => {deletePizzaType()}}>Delete</button></td>
            
                                    </tr>
                                )})}
                            
                            </tbody>
                        
                        </table>
                        <div className='mt-3'>
                           <Pagination 
                            totalItemsCount={paginationItems.total ?? 5}
                            activePage={paginationItems.current_page}
                            itemsCountPerPage={paginationItems.per_page}
                            onChange={(pageNumber) => handlePageClick(pageNumber)}
                            itemClass="page-item"
                            linkClass='page-link'
                            firstPageText="first"
                            lastPageText="last"
                           />         
                        </div>
                        <Modal
                            isOpen={modalIsOpen}
                            
                            onRequestClose={closeModal}
                            style={customStyles}
                        >
                            <h2 style={{color: "red"}}>{responseMessage}</h2>
                            <div> {recordData.id ? <img  style={{marginLeft: "170px"}} src={`${recordData.image}`} alt="pizza-type"/> : ""} </div>
                            <button className="modal-close-button" onClick={closeModal}>close</button>
                            {setModalFunctionType(recordData.id ? "edit" : "add")}
                            <form>
                                <div className="form-group">
                                    <label>Name</label>
                                    <input type="text"   defaultValue={name}  onChange={(e) => { setName(e.target.value)}} className="form-control" id="name" placeholder="Enter Name" />
                                </div>
                                <div className="form-group">
                                    <label>Price</label>
                                    <input type="number" defaultValue={price} onChange={(e) => { setPrice(e.target.value)}} className="form-control" id="price" placeholder="Enter Price" />
                                </div>
                                <div className="form-group">
                                    <label>Image</label>
                                    <input type="file" onChange={(e) => { setImage(e.target.files[0])}} className="form-control" id="image"  />
                                </div>
                                
                                <div className="form-group">
                                    <label>Status</label>
                                    <select defaultValue={status} onChange={(e) => { setStatus(e.target.value)}} className="form-control" id="status">
                                        <option value="1">Activated</option>
                                        <option value="0">Archived</option>
                                    </select>
                                </div>
                                <div className="form-group">
                                    <label>Description</label>
                                    <textarea defaultValue={description} onChange={(e) => { setDescription(e.target.value)}} className="form-control" id="description" rows="3"></textarea>
                                </div>
                                <input type="hidden" defaultValue={recordData.id ?? ""} onChange={(e) => { setId(e.target.value)}} className="form-control" id="id" />
                            </form>
                        </Modal>
                        
                    </div>
                </div>
                
            </div>
    </div>
  )
}
 |