%-----------------------------------------------------------------------------%

:- module regression_merge_switches.
:- interface.

:- import_module io.

:- pred main(io::di, io::uo) is det.

%-----------------------------------------------------------------------------%
%-----------------------------------------------------------------------------%

:- implementation.

:- import_module list.
:- import_module string.

:- type header
    --->    header(field_name, header_value).

:- type field_name
    --->    field_name(string).

:- type header_value
    --->    header_value(string).

:- type message_id
    --->    message_id(string).

%-----------------------------------------------------------------------------%

main(!IO) :-
    Date = header_value("Tue, 7 Nov 2023 12:29:43 +1100"),
    MessageId = message_id("20231107122943.GB219@example"),
    make_headers(prepare_send, Date, MessageId, Headers),
    list.foldl(io.print_line, Headers, !IO).

:- type prepare_temp
    --->    prepare_send
    ;       prepare_edit
    ;       prepare_postpone.

:- pred make_headers(prepare_temp::in, header_value::in, message_id::in,
    list(header)::out) is det.

make_headers(Prepare, Date, MessageId, Headers) :-
    some [!Acc] (
        !:Acc = [],
        (
            ( Prepare = prepare_send
            ; Prepare = prepare_postpone
            ),
            cons(header(field_name("Date"), Date), !Acc)
        ;
            Prepare = prepare_edit
        ),
        (
            Prepare = prepare_send,
            cons(header(field_name("Message-ID"),
                wrap_angle_brackets(MessageId)), !Acc)
        ;
            ( Prepare = prepare_edit
            ; Prepare = prepare_postpone
            )
        ),
        list.reverse(!.Acc, Headers)
    ).

:- func wrap_angle_brackets(message_id) = header_value.

wrap_angle_brackets(message_id(MessageId)) =
    header_value("<" ++ MessageId ++ ">").

%-----------------------------------------------------------------------------%
% vim: ft=mercury ts=4 sts=4 sw=4 et
