import React, { FC, useState, useCallback } from 'react';
import {
    CreateNrSoundRecording_createNrSoundRecording as CreatedSong
} from 'src/data/mutations/soundRecording/__generated__/CreateNrSoundRecording';
import { Song, Vendor } from 'src/data/queries';
import BasicMetadata from '../basicMetadata';
import RightsInfo from '../rightsInfo';
import SoundRecordingSearch from '../soundRecordingSearch';
import TrackMetadata from '../trackMetadata';
import VendorSearch from '../vendorSearch';

export const CLASSNAME = 'AddSong';

const AddSong: FC = () => {
    const [vendorOption, setVendorOption] = useState<Vendor>();
    const [songOption, setSongOption] = useState<Song>();
    const [songCreated, setSongCreated] = useState<CreatedSong>();
    const [addRightsInfo, setAddRightsInfo] = useState<boolean>(false);

    const handleVendorChange = useCallback((vendor?: Vendor) => {
        setVendorOption(vendor);
    }, [setVendorOption]);

    const handleSongChange = useCallback((song?: Song) => {
        setSongOption(song);
    }, [setSongOption]);

    return (
        <div className={CLASSNAME} data-testid={CLASSNAME}>
            { !songCreated && (
                <div>
                    <VendorSearch
                        onChange={handleVendorChange}
                        vendor={vendorOption}
                    />
                    <SoundRecordingSearch
                        onChange={handleSongChange}
                        song={songOption}
                    />
                    <BasicMetadata setSongCreated={setSongCreated} songOption={songOption} />
                </div>
            )}
            { songCreated && !addRightsInfo && (
                <div>
                    <TrackMetadata setAddRightsInfo={setAddRightsInfo} songId={songCreated.id} />
                </div>
            )}
            { songCreated && addRightsInfo && (
                <div>
                    <RightsInfo songId={songCreated.id} />
                </div>
            )}
        </div>
    );
};

export default AddSong;
