import React, { useState } from 'react';
import { Head, usePage } from '@inertiajs/react';
import { Container, Row, Col, Card, Alert } from 'react-bootstrap';
import Layout from '../../../Layouts';
import BreadCrumb from '../../../Components/Common/BreadCrumb';
import estilosFoco from '../Contratos/Shared/estilosFocoAccesible.module.css';
import { ComercializadoraSips, SipsProviderConfig } from './types';
import { resolveSipsProvider } from './config/resolveProvider';
import ComercializadoraSelect from './components/ComercializadoraSelect';
import SipsUnsupportedMessage from './components/SipsUnsupportedMessage';
import AudaxSipsPanel from './components/Audax/AudaxSipsPanel';
import AdxSipsPanel from './components/Adx/AdxSipsPanel';
import styles from './Sips.module.css';

interface SipsPageProps {
    comercializadoras: ComercializadoraSips[];
    sipsProvidersByCodCom: Record<string, SipsProviderConfig>;
    [key: string]: unknown;
}

const SipsIndex = () => {
    const {
        comercializadoras = [],
        sipsProvidersByCodCom = {},
    } = usePage<SipsPageProps>().props;

    const [selectedComercializadora, setSelectedComercializadora] = useState<ComercializadoraSips[]>([]);

    const comercializadora = selectedComercializadora[0] ?? null;
    const provider = resolveSipsProvider(comercializadora, sipsProvidersByCodCom);

    const renderProviderPanel = () => {
        if (!comercializadora) {
            return (
                <Alert variant="light" className="border mt-4 text-muted mb-0">
                    Seleccione una comercializadora para acceder a la consulta SIPS.
                </Alert>
            );
        }

        if (!provider) {
            return <SipsUnsupportedMessage comercializadora={comercializadora} />;
        }

        const codCom = Number(comercializadora.CodCom);

        switch (provider.key) {
            case 'audax':
                return (
                    <AudaxSipsPanel
                        key={`audax-${codCom}`}
                        codCom={codCom}
                        provider={provider}
                    />
                );
            case 'adx':
                return (
                    <AdxSipsPanel
                        key={`adx-${codCom}`}
                        codCom={codCom}
                        provider={provider}
                    />
                );
            default:
                return <SipsUnsupportedMessage comercializadora={comercializadora} />;
        }
    };

    return (
        <React.Fragment>
            <Head title="Gestión SIPS" />
            <div className={`page-content ${estilosFoco.scope}`}>
                <Container fluid className={styles.contenedorSips}>
                    <BreadCrumb title="Gestión SIPS" pageTitle="SIPS" />
                    <Row>
                        <Col lg={12}>
                            <Card>
                                <Card.Header>
                                    <h1 className="card-title mb-0 h4">Gestión SIPS</h1>
                                </Card.Header>
                                <Card.Body>
                                    <section aria-labelledby="sips-seleccion-comercializadora">
                                        <div className={styles.seccionTitulo}>
                                            <h2 id="sips-seleccion-comercializadora">Comercializadora</h2>
                                        </div>
                                        <Row>
                                            <ComercializadoraSelect
                                                comercializadoras={comercializadoras}
                                                selected={selectedComercializadora}
                                                onChange={setSelectedComercializadora}
                                                colSize={6}
                                            />
                                        </Row>
                                    </section>

                                    {renderProviderPanel()}
                                </Card.Body>
                            </Card>
                        </Col>
                    </Row>
                </Container>
            </div>
        </React.Fragment>
    );
};

SipsIndex.layout = (page: React.ReactNode) => <Layout children={page} />;

export default SipsIndex;
