import Head from 'next/head'
import Link from 'next/link'
import Form from 'react-bootstrap/Form';
import Table from 'react-bootstrap/Table'
import { useState } from 'react';
import Image from 'next/image'
import Container from 'react-bootstrap/Container'
import Nav from 'react-bootstrap/Nav'
import Navbar from 'react-bootstrap/Navbar';
import NavDropdown from 'react-bootstrap/NavDropdown'
import Row from 'react-bootstrap/Row'
import Col from 'react-bootstrap/Col'
import Button from 'react-bootstrap/Button';
import { useRouter } from 'next/router';
import { useContext } from 'react';
import { ProgramContext } from '../src/ProgramContext';

export default function Home() {
    const router = useRouter();
    const { updateProgram } = useContext(ProgramContext);

    const handleClick = () => {
        const program = { name: 'John', age: 25 };
        updateProgram(program);
        router.push('/runner');
    };

    const [instructionList, setInstructionList] = useState([]);

    return (
        <>
            <Head>
                <title>Tomasulo</title>
                <meta name="description" content="Generated by create next app" />
                <meta name="viewport" content="width=device-width, initial-scale=1" />
                <link rel="icon" href="/favicon.ico" />
                <link
                    rel="stylesheet"
                    href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css"
                    integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65"
                    crossorigin="anonymous"
                />
            </Head>
            <Navbar bg="dark" variant="dark" expand="lg">
                <Container>
                    <Navbar.Brand href="/">Tomasulo</Navbar.Brand>
                </Container>
            </Navbar>
            <main>
                <Container>
                    <Row className="row my-4">
                        <Col>
                            <h3>Instructions</h3>
                        </Col>
                        <Col className="text-end">
                            <Button className="ms-4" variant="primary" onClick={handleClick}>Execute</Button>
                        </Col>
                    </Row>
                    <Row className="mb-3">
                        <Col>
                            <Form.Control
                                className="form-control-sm"
                                type="number"
                                placeholder="Select number of instructions"
                            />
                        </Col>
                    </Row>
                    <Row className="row my-4">
                        <Col>
                            <Table bordered hover>
                                <thead>
                                    <tr>
                                        <th>Op</th>
                                        <th>RD</th>
                                        <th>RS</th>
                                        <th>RT</th>
                                    </tr>
                                </thead>
                                <tbody>
                                    {instructionList.map((instr, index) => (
                                        <tr>
                                            <td>{`${instr.instrucao.operacao} ${instr.instrucao.registradorR} ${instr.instrucao.registradorS} ${instr.instrucao.registradorT}`}</td>
                                            <td>
                                                <option value="">Operand</option>
                                                <option value="ADD">ADD</option>
                                                <option value="ADDD">ADDD</option>
                                                <option value="BEQ">BEQ</option>
                                                <option value="BNEZ">BNEZ</option>
                                                <option value="DADDUI">DADDUI</option>
                                                <option value="DIVD">DIVD</option>
                                                <option value="LD">LD</option>
                                                <option value="MULTD">MULTD</option>
                                                <option value="SD">SD</option>
                                                <option value="SUBD">SUBD</option>
                                            </td>
                                            <td>
                                                <Form.Control
                                                    className="form-control"
                                                    type="text"
                                                    name={r}
                                                    id={r}
                                                    size="3"
                                                    maxLength="3"
                                                />
                                            </td>
                                            <td>
                                                <Form.Control
                                                    className="form-control"
                                                    type="text"
                                                    name={s}
                                                    id={s}
                                                    size="3"
                                                    maxLength="5"
                                                />
                                            </td>
                                            <td>
                                                <Form.Control
                                                    className="form-control"
                                                    type="text"
                                                    name={t}
                                                    id={t}
                                                    size="3"
                                                    maxLength="3"
                                                />
                                            </td>
                                        </tr>
                                    ))}
                                </tbody>
                            </Table>
                        </Col>
                    </Row>
                </Container>
            </main>
        </>
    )
}